This looks useful, but would be even more so if you could include the following type of exception mapping:
<action ....> <exception error="some.error.key" type="package.Exception" /> </action> The action servlet would then generate an ActionError and add it to the request. This would save a lot of code of the following type: } catch (package.Exception e) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("some.error.key")); saveErrors(request, errors); return (mapping.findForward("failure")); } which seems to take up half of my actions at the moment. Laine Donlan wrote: > Each action mapping can define any number of exceptions that may occur > and how they should be handled. The handling of the exceptions consists > of the definition of a key value (error message, etc) , and a path > (optional - input of the action would be the default). When an > exception occurs that can be handled the ActionException (consisting of > key, and path) is placed into the user's session under a key constant - > org.apache.struts.action.ACTION_EXCEPTION. It can then be handled > however is necessary by an app. > The following would be an example of an action mapping: > > <action path="/handleSomething" > name="someForm" > validate="false" > input="/someUri....."> > > <forward ...just like always/> > <exception key="some.key" > type="some.package.business.logic.Exception"/> > <exception key="some.other.key" > type="some.package.business.logic.Exception2" > path="/someotherUri..."/> > <exception key="general" > type="java.lang.Exception"/> > <exception key="ejb" > type="javax.ejb.EjbException" > hierarchachal="false"/> > </action> > > The following outlines how each of the exceptions would be handled: > > 1) If an some.package.business.logic.Exception is throw from the Action > perform method, the client will be dispatched to the input of the form > with an ActionException placed into the session under a specific key. > > 2) If an some.package.business.logic.Exception2 is thrown, the client > will be dispatched to the path specified in that mapping with the > ActionException placed in the session. > > 3) If anything other than the previous 2 exception or an EjbException is > thrown, the client would be re-directed to the input of the form, again > with the ActionException placed into the session. > > 4) If an EjbException is thrown (it's children would not be handled by > this) then the client would be dispatched with that ActionException in > the session under a defined constant value. > > The changes to the code base consisted of: > > 1) Addition of ActionException and ActionExceptions classes. Very much > like the existing mapping classes. > 2) Change of the perform() method signature to throw Exception rather > than IOException and ServletException > 3) Update the processActionPerform() method of the ActionServlet perform > the try{}cactch{} and to map resultant exceptions. > 4) Add the digesting into the ActionServlet init() > 5) Add the ActionExceptions reference into the ActionMapping. > > I have attached the code: > <<changes.zip>> > > As well as diffs of the changes to the ActionServlet and Action classes > <<Action-diff.txt>> <<ActionServlet-diff.txt>> > > A couple of major @todo's in the code would be the implementation of > global-exceptions, and a currently hard-coded exception message in any > unhandled exception that is wrapped into a ServletException. I wanted > to see if there was interest for this type of feature, if so I can > easily put the rest of it together and submit it. > > Thanks, any comments or feedback would be appreciated. > > ------------------------------------------------------------------------ > Name: changes.zip > Type: Zip Compressed Data (application/x-zip-compressed) > changes.zip Encoding: base64 > Description: changes.zip > Download Status: Not downloaded with message > > Name: Action-diff.txt > Action-diff.txt Type: Plain Text (text/plain) > Encoding: base64 > Description: Action-diff.txt > > Name: ActionServlet-diff.txt > ActionServlet-diff.txt Type: Plain Text (text/plain) > Encoding: base64 > Description: ActionServlet-diff.txt > > ------------------------------------------------------------------------ > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- Joe Faith Runtime Collective, Ltd T: (+44) 01273 234294