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]

Reply via email to