Well, in your example scenario, you said that ActionOne first saves the 
multipart data to a file, and then forwards to ActionTwo, so there's no 
problem.  When happens when a redirect forward is returned from an Action is 
as follows:

- Struts sees that the redirect property of the ActionForward is true, so 
instead of just calling the next action in the same request, it sends a 
response back to the browser.  The response contains a Redirect: header which 
contains the URL for ActionTwo.  The browser sees the Redirect header and so 
makes a request for ActionTwo, this time with no multipart/form-data.  The 
new request gets passed by struts directly to ActionTwo.  

Where the above would be a problem is if ActionOne did NOT handle the 
multipart data, but instead forwarded to ActionTwo expecting ActionTwo to 
handle the multipart data.  Since a redirect causes a new request to be made, 
any data in the current request is lost by the time ActionTwo gets called.  
But since in this case ActionOne already handled the request, there's no real 
problem.

Another example of where using a redirect forward is a problem is if your 
action saves some ActionMessages or ActionErrors in the request and then 
forwards, expecting the page being forwarded to to display the messages.  
Since ActionMessages are stored in the request object, if you returned a 
redirect forward from your action, the messages will be lost by the time the 
next page gets the request.

Adam

On Thursday 18 April 2002 01:14 pm, you wrote:
> Thats a pretty dirty workaround if your multipart request contained a
> 5MB file being uploaded.  Or what occurs in that case (when the browser
> makes the new request)?
>
> Rob
>
> Adam P. Jenkins wrote:
> > I believe another workaround is to set the redirect attribute on the
> > forward to true.  E.g. the action config for ActionOne would have a local
> > forward like this:
> >
> > <forward name="nextaction" path="/action2.do" redirect="true"/>
> >
> > Then in ActionOne, when you return mapping.findForward("nextaction"),
> > this will cause the struts to send a redirect header to the browser
> > telling it to make a new request for action2.  This works fine unless you
> > really wanted ActionTwo to have access to the same request attributes and
> > parameters as ActionOne.
> >
> > Adam
> >
> > On Thursday 18 April 2002 08:47 am, rob wrote:
> >>It's been this way since struts 1.0 (and likely prior to) but http
> >>requests carrying multipart/form-data posts result in an exception being
> >>thrown if forwarded through more than one action.
> >>
> >>(e.g request flow)
> >>
> >>1 - submit multipart/form-data request (with at least one file input)
> >>     request is forwarded to ActionOne.
> >>2 - ActionOne handles multipart data, writes a file to disk does
> >>     something with other parameters etc.  then forwards to ActionTwo.
> >>3 - Exception is thrown.
> >>
> >>This occurs in the following versions I've tested 1.0.x, 1.1-b1.  Copies
> >>of the exceptions follow this post.
> >>
> >>Workaround, never forward to a second action, always forward to a .jsp
> >>which must be the end point for the request after the first action.
> >>(This kind of sucks).
> >>
> >>If this is a bug then consider it submitted, if it's designed this way
> >>then how about changing it?  (pretty please?)
> >>
> >>Thanks
> >>
> >>Rob
> >
> > --
> > To unsubscribe, e-mail:  
> > <mailto:[EMAIL PROTECTED]> For additional
> > commands, e-mail: <mailto:[EMAIL PROTECTED]>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to