Hal Deadman wrote:
> I haven't had a chance to test whether the request parameters are still
 > available. Without the patch, the processActionForward() method will
 > call doForward() if redirect="false" which calls
 > RequestDispatcher.forward().That will always fail if the wrapped request
 > is used. Does it matter if getParameter() works or not in the actions
 > that follow the first action?

No, I could care less if they worked in the actions that follow the
first action though others may find it useful?

 > If that limitation exists I think it's preferable than getting an error.

I agree.

> 
> Currently if the input attribute specified for the target after failed
 > validation is an action or if you try to forward to an action from the
 > first action execute method with redirect=false, then you get an error
 > eventually after the actions execute method is called.
> 
> After I submitted this patch, I thought it might not be the best way
 > if anyone out there is extending RequestProcessor.java. Are there any
 > struts extensions like Tiles or Velocity that extend that? If they are
 > overriding doForward() or doInclude() then they need to be sure they
 > unwrap the request before dispatching it.
> 
> Hal
> 
> 
> 
>>-----Original Message-----
>>From: Martin Cooper [mailto:[EMAIL PROTECTED]]
>>Sent: Sunday, April 21, 2002 12:49 AM
>>To: Struts Developers List; [EMAIL PROTECTED]
>>Subject: Re: multipart/form-data (bug?) or intended behavior?
>>
>>
>>Hal,
>>
>>With this patch, are the original request parameters still 
>>available in the
>>target action or JSP? For a multipart request, the request 
>>wrapper is where
>>the parameters are maintained so that request.getParameter() 
>>and friends
>>work as usual.
>>
>>If that all works, could you enter a bug report in bugzilla 
>>and attach your
>>patch to it? That will ensure that we don't lose track of it.
>>
>>Thanks.
>>
>>--
>>Martin Cooper
>>
>>
>>----- Original Message -----
>>From: "Hal Deadman" <[EMAIL PROTECTED]>
>>To: "'Struts Developers List'" <[EMAIL PROTECTED]>
>>Sent: Friday, April 19, 2002 10:38 AM
>>Subject: RE: multipart/form-data (bug?) or intended behavior?
>>
>>
>>
>>>The attached version of RequestProcessor.java fixed the multipart
>>>request forwarding issue that we were experiencing. Here is 
>>
>>the patch
>>
>>>diff and I attached the old and new versions of 
>>
>>RequestProcessor.java.
>>
>>>The patch just makes sure that the request is always 
>>
>>unwrapped before
>>
>>>forwarding by moving the unwrap code to doForward() and 
>>
>>doInclude(). It
>>
>>>could also just be added to processActionForward().
>>>
>>>534a535,539
>>>
>>>>        // Unwrap the multipart request (if any)
>>>>        if (request instanceof MultipartRequestWrapper) {
>>>>            request = ((MultipartRequestWrapper)
>>>
>>>request).getRequest();
>>>
>>>>        }
>>>>
>>>
>>>568a574,578
>>>
>>>>        // Unwrap the multipart request (if any)
>>>>        if (request instanceof MultipartRequestWrapper) {
>>>>            request = ((MultipartRequestWrapper)
>>>
>>>request).getRequest();
>>>
>>>>        }
>>>>
>>>
>>>932a943,945
>>>
>>>>        if (request instanceof MultipartRequestWrapper) {
>>>>            request = ((MultipartRequestWrapper)
>>>
>>>request).getRequest();
>>>
>>>>        }
>>>
>>>952,956d964
>>><         // Unwrap the multipart request (if any)
>>><         if (request instanceof MultipartRequestWrapper) {
>>><             request = ((MultipartRequestWrapper)
>>>request).getRequest();
>>><         }
>>><
>>>981,985d988
>>><         // Unwrap the multipart request (if any)
>>><         if (request instanceof MultipartRequestWrapper) {
>>><             request = ((MultipartRequestWrapper)
>>>request).getRequest();
>>><         }
>>><
>>>1058a1062
>>>
>>>
>>>
>>>-----Original Message-----
>>>From: Deadman, Hal [mailto:[EMAIL PROTECTED]]
>>>Sent: Friday, April 19, 2002 8:12 AM
>>>To: Struts Developers List
>>>Subject: RE: multipart/form-data (bug?) or intended behavior?
>>>
>>>
>>>Can't this multi-part request forward problem be fixed by 
>>
>>unwrapping the
>>
>>>request before doing RequestDispatcher.forward/include? All 
>>
>>the methods
>>
>>>in RequestProcessor get the real request object from within the
>>>MultipartRequestWrapper before calling doForward() or 
>>
>>doInclude() except
>>
>>>for processActionForward() which gets called after action.execute().
>>>
>>>I think the
>>>        if (request instanceof MultipartRequestWrapper) {
>>>            request = ((MultipartRequestWrapper) 
>>
>>request).getRequest();
>>
>>>        }
>>>
>>>code should be moved to doForward() and doInclude() and removed
>>>everywhere else within RequestProcessor. I will try this fix today.
>>>Probably won't work because it seems too easy.
>>>
>>>Hal
>>>
>>>-----Original Message-----
>>>From: Adam P. Jenkins [mailto:[EMAIL PROTECTED]]
>>>Sent: Thu 4/18/2002 7:56 PM
>>>To: Struts Developers List
>>>Cc:
>>>Subject: Re: multipart/form-data (bug?) or intended behavior?
>>>
>>>
>>>
>>>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]
>>>>
>>><mailto:[EMAIL PROTECTED]> > For additional
>>>
>>>>>commands, e-mail: < mailto:[EMAIL PROTECTED]
>>>>
>>><mailto:[EMAIL PROTECTED]> >
>>>
>>>--
>>>To unsubscribe, e-mail:   <
>>>mailto:[EMAIL PROTECTED]
>>><mailto:[EMAIL PROTECTED]> >
>>>For additional commands, e-mail: <
>>>mailto:[EMAIL PROTECTED]
>>><mailto:[EMAIL PROTECTED]> >
>>>
>>>
>>>
>>>
> 
> 
> --
> 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