Dmitri,
I ~really~ like the way this Action works.
* It keeps control in the Struts-config, and does not embed presentation
details into Action source code.
* A single mapping could dispatch every HTML form using a given
ActionForm bean. Or, one could choose to use more mappings and fewer
local forwards, as preferred.
* Each local forward can go to a different ActionMapping, or to the same
one with different query strings, or any combination of either approach.
* It is easily adapted for those nasty image buttons and also shows when
they are being used.
It is similar to a RelayAction that I use quite a bit, but turns things
around. I'd like to adopt it into my "Scaffold" package as
"findForwardAction". (There may be other use-cases beyond buttons that
haven't occurred yet.) Would that be all right? Of course, the author
credit would be yours, and the license is ASF.
-Ted.
Dmitri Valdin wrote:
>
> MultiSubmitAction.java
> ======================
>
> public class MultiSubmitAction extends Action {
>
> public ActionForward perform(ActionMapping mapping,
> ActionForm form,
> HttpServletRequest request,
> HttpServletResponse response)
> throws IOException, ServletException {
>
> String forwards[] = mapping.findForwards();
>
> for (int i = 0; i < forwards.length; i++) {
> if (request.getParameter(forwards[i]) != null) {
> // Return the required ActionForward instance
> return mapping.findForward(forwards[i]);
> }
> }
>
> // Go back to input (any other ideas ?)
> return new ActionForward(mapping.getInput());
>
> }
> }
>
> Some considerations:
>
> If you never intend to use images, then you can omit ".x" suffix.
>
> If somebody wants to have all methods stored in one file he can subclass
> DispatchAction
> and play with parameter property:
>
> <action path="/add"
> type="org.apache.struts.webapp.example.AddDeleteAction"
> name="testForm"
> parameter="add"
> scope="request"
> input="/test.jsp">
> </action>
>
> <action path="/delete"
> type="org.apache.struts.webapp.example.AddDeleteAction"
> name="testForm"
> parameter="delete"
> scope="request"
> input="/test.jsp">
> </action>
>
> Instead of calling return mapping.findForward(forwards[i]) it might be
> interesting to instantiate the action, similar to as it is done in
> ActionServlet
> (protected Action processActionCreate) and just call it's perform() method.
> It would be faster for sure.
>
> Instead of 'misusing' mappings it might be possible to introduce some
> additional tag
> to action config:
>
> <dispatch property="delete.x" path="/delete.do"/>
> or
> <dispatch property="delete.x" method="delete"/>
>
> Dmitri Valdin
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel +1 716 737-3463
-- http://www.husted.com/struts/
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>