You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Ted Husted (JIRA)" <ji...@apache.org> on 2006/12/06 03:12:57 UTC

[jira] Closed: (STR-1621) [scaffold] issues with actions

     [ http://issues.apache.org/struts/browse/STR-1621?page=all ]

Ted Husted closed STR-1621.
---------------------------

    Resolution: Won't Fix

This code has been archived. 


> [scaffold] issues with actions
> ------------------------------
>
>                 Key: STR-1621
>                 URL: http://issues.apache.org/struts/browse/STR-1621
>             Project: Struts 1
>          Issue Type: Improvement
>          Components: Extras
>    Affects Versions: Nightly Build
>         Environment: Operating System: other
> Platform: Other
>            Reporter: Ted Husted
>         Assigned To: Ted Husted
>            Priority: Minor
>
> We are using the scaffold extension of Struts for a few months now
> and I must say that we are globallyvery happy with it.
>  
> However, after this period of intensive use, I would like to report you
> some points that could be improved:
>  
>  
> 1) BaseAction.java - execute(...) method
>     The basic skeleton of the process is:
>         ...
>         preProcess(mapping,form,request,response);
>         if (isErrors(request)) {
>             return findFailure(mapping,form,request,response);
>         }
>         executeLogic(mapping,form,request,response);
>         postProcess(mapping,form,request,response);
>         etc...
>  
> I understand the need of testing the presence of potential errors after the
> preProcess phase.
> But this comes up with some side-effect.
> Imagine this scenario:
> * I call a first (scaffold) action. 
> * The process result of the first action is negative (isErrors is true).
> Therefore the code looks for the exit "failure" 
> * Imagine now that "failure" forwards to another (scaffold) action.
> * Because of the presence of errors in request (put by the first action),
>    the second action will never executeLogic and also route to "failure".
>    => it is asif the preProcess was negative
>  
>  
> 2) Aggregate ProcessResult
> ProcessAction.java - method checkOutcome(...)
>  
>              if (result.isAggregate()) {
>                  // recurse for each ProcessResult in collection
>                 Collection collection = (Collection) result.getData();
>                 Iterator iterator = collection.iterator();
>                 while (iterator.hasNext()) {
>                     ProcessResult nextResult = (ProcessResult) iterator.next();
>                     checkOutcome(mapping,request,nextResult);
>                 }
>             } else {
>                  // call extension points for whatever is returned
>                 if (result.isData())
>                     checkData(mapping,request,result);
>                 if (result.isMessages())
>                     checkMessages(mapping,request,result);
>                 if (result.isDispatch())
>                     checkDispatch(mapping,request,result);
>             }
>  
>  
> We clearly see that a *single* ProcessResult might be data and/or messages
> and/or dispatch.
> But it is not possible to combine data *and* dispatch* for an *aggregate* result.
> (messages and dispatch info attached to the top-level result are ignored)
>  
> An immediate workaround may seem to put the dispatch in one of the (sub-)
> results of the collection.
>  
> BUT as we recurse for each result of the collection, this is the *very last* result
> that will definitively set the final value of the Tokens.SUCCESS request attribute.
>  
> protected void checkDispatch(...) {
>         ActionForward forward = null;
>         if (processResult.isDispatchPath()) {
>             forward = new ActionForward(dispatch);
>         } else {
>             forward = mapping.findForward(dispatch);
>         }
>  
>             // Our findSuccess looks for this
>         request.setAttribute(Tokens.SUCCESS,forward)
>  
> Conclusion: If a dispatch is set by a non-last item, it is no worse: it will be
> reset to null by the last one :-(

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/struts/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira