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]

Reply via email to