Looks like you need a MultipartFilter earlier in the Filter Chain than your
Filter.  That way both your Filter and the Action will get the results.  It
will bypass Strut's built-in Multipart support, but it should work fine.  (I
think com.oreilly.servlets has one)
 (*Chris*)

On 3/27/07, Lance <[EMAIL PROTECTED]> wrote:

My filter is only interested in text parameters, my struts action
processes the file parameter. If I parse the request myself (in the
filter), the file parameter does not make it through to my action. If I
do not parse the request myself, I can not see the parameters in my
filter.

Hope this clears things up a bit.

trad-ex wrote:
> Hi Lance,
>
> Sorry for my misunderstanding your issue.
> What I understood is:
>
>  Your Filter class works fine except file parameter.
>
> Is this correct ?
> So, after I looked over your implementation, I found the line below:
>
>         parameterMap = multipartHandler.getTextElements();
>
> So, parameterMap has only "normal text parameters" (you called), doesn't
> it ?
>
> Why doesn't you adopt "getAllElements()" ?
> But I don't have tested it yet, but if my guess above is right, it does
> work.
>
> Best regards,
> trad-ex
>
>
>> Hi trad-ex,
>> In action code, the ActionServlet has already parsed the request for
you
>> so request.getParameterMap() magically works. In a filter scenario, the
>> request has not yet been parsed. I have since abondened attempting to
>> filter multipart requests in my filter. Luckily most of our actions
>> extend a common BaseAction and I was able to plug the filtering logic
in
>> there. It would have been nice to do it in a filter. I'm still
>> interested if someone else has an answer.
>>
>> Cheers,
>> Lance.
>>
>> trad-ex wrote:
>>
>>> Hi Lance,
>>>
>>> Just curious, I implemented multipart request handler using Struts 1.2
,
>>> ActionForm and Actoin class ( not using Fileter...) .
>>>
>>> like:
>>>
>>>   protected ActionForward executeAction(
>>>             ActionMapping mapping ,
>>>             ActionForm form ,
>>>             HttpServletRequest request ,
>>>             HttpServletResponse response )
>>>   {
>>>     ActionErrors errors = new ActionErrors() ;
>>>     HttpSession session = request.getSession() ;
>>>
>>>     String contentType = request.getContentType() ;
>>>     if( contentType == null || !contentType.startsWith(
"multipart/form-
>>> data" ) )
>>>       return null ;
>>>
>>>     MultiFilesImportForm multiFilesImportForm =
>>>                                     (MultiFilesImportForm) form ;
>>>     Hashtable multiFormFileTable =
>>>                          multiFilesImportForm.getMultiFilesTable() ;
>>>
>>>     ......
>>>
>>>     ** executeAction calls execute internally.
>>>
>>> My ActionForm ( called MultiFilesImportForm ) is like:
>>>
>>> public class MultiFilesImportForm extends ActionForm
>>> {
>>>   public MultiFilesImportForm()
>>>   {
>>>   }
>>>   public Hashtable getAllRequestTable()
>>>   {
>>>     return getMultipartRequestHandler().getAllElements() ;
>>>   }
>>>
>>>   public Hashtable getMultiFilesTable()
>>>   {
>>>     Hashtable fileElements =
>>>               getMultipartRequestHandler().getFileElements() ;
>>>     Hashtable stringElements = getMultiStringTable() ;
>>>
>>>     for( Enumeration enumStrKey = stringElements.keys() ; enumStrKey.
>>> hasMoreElements() ; )
>>>       fileElements.remove( enumStrKey.nextElement() ) ;
>>>
>>>     return fileElements ;
>>>   }
>>>
>>>   public Hashtable getMultiStringTable()
>>>   {
>>>     Hashtable multiStringTable = new Hashtable() ;
>>>     Hashtable allRequestTable  = getAllRequestTable() ;
>>>
>>>     for( Enumeration enumKey = allRequestTable.keys() ; enumKey.
>>> hasMoreElements() ; )
>>>     {
>>>       String key  = (String) enumKey.nextElement() ;
>>>       Object elem = allRequestTable.get( key );
>>>
>>>       if( elem instanceof String )
>>>         multiStringTable.put( key , elem ) ;
>>>     }
>>>
>>>     return multiStringTable ;
>>>   }
>>>
>>>   public ActionErrors validate(
>>>                       ActionMapping mapping ,
>>>                       HttpServletRequest request )
>>>   {
>>>    .......
>>>
>>> Best Regards,
>>> trad-ex
>>>
>>>
>>>
>>>
>>>> Can someone tell me the best way to deal with multipart parameters in
a
>>>> Filter without affecting struts?
>>>>
>>>> In my filter, request.getParameterMap() returns an empty map because
the
>>>> multipart content has not yet been parsed. I had a look in the struts
>>>> code and saw references to a MultipartRequestWrapper and a
>>>> CommonsMultipartRequestHandler. From what I can see, the
requestHandler
>>>> parses the request and calls MultipartRequestWrapper.setParameter().
>>>>
>>>> So... in my filter I do the following:
>>>>
>>>> protected void doFilter(HttpServletRequest request,
HttpServletResponse
>>>> response, FilterChain chain) throws IOException, ServletException {
>>>>    boolean isMultipart = isMultipart(request);
>>>>    Map parameterMap;
>>>>    if (isMultipart) {
>>>>        // wrap the request so that
>>>> CommonsMultipartRequestHandler.handleRequest()
>>>>        // can call set parameter. the wrapped request is then passed
>>>> down the filter chain
>>>>        request = new MultipartRequestWrapper(request);
>>>>        MultipartRequestHandler multipartHandler = new
>>>> CommonsMultipartRequestHandler();
>>>>        ModuleConfig moduleConfig = (ModuleConfig)
>>>> servletContext.getAttribute(Globals.MODULE_KEY);
>>>>        request.setAttribute(Globals.MODULE_KEY, moduleConfig);
>>>>        multipartHandler.handleRequest(request);
>>>>        request.removeAttribute(Globals.MODULE_KEY);
>>>>        parameterMap = multipartHandler.getTextElements();
>>>>    } else {
>>>>        parameterMap = request.getParameterMap();
>>>>    }
>>>>
>>>>    // do some stuff with the parameters
>>>>
>>>>    chain.doFilter(request, response);
>>>> }
>>>>
>>>> The problem now is that when I upload a file, struts thinks the file
is
>>>> null. request.getParameter() works for normal text parameters on the
>>>> multipart form.
>>>> I have also tried parsing the request and sending the non-wrapped
>>>> request down the chain but struts does not re-parse the request if i
do
>>>> this.
>>>>
>>>> I am using struts 1.3.5
>>>>
>>>> Thanks,
>>>> Lance.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


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


Reply via email to