在struts1中的DispatchAction处理文件上传的问题及注意事项

一般在上传文件的时候,form都是采用的POST方式,并且enctype= "multipart/form-data "。这样页面域参数就不能被DispatchAction解析到。DispatchAction只能解析到编码在URL上的参数,因此,在这种情况下,要正确找到Action中请求的函数,必须采用如下方式:

<html:form   action= "addArticleAction?method=create "   enctype= "multipart/form-data ">
...
</html:form>

然后在struts-config中建立相应的 <action-mappings> ,把请求转发到相应的action.

针对Apache的FileUpload组件封装的request的取值如下:

            MultipartFormDataRequest multipartformdatarequest = null;
            multipartformdatarequest = new MultipartFormDataRequest(request);
            
          String siteId = multipartformdatarequest.getParameter("siteId");
          String childDir = multipartformdatarequest.getParameter("childDir");

如果页面由于通用原因已经用域参数承载method方法,但又要支持DispatchAction的话,可以采用javascript在上传过程中把对应域删除,文件上传完之后再回复,参考代码如下:

function uploadFile(){

    if($("new_file").value==""){
        alert("请选择上传文件");
        return;
    }
    $("operate").value="createNewFile";
    var form = document.forms[0];
    var form_elems = form.elements;
    var operateObj=form_elems["operate"];
    operateObj.parentNode.removeChild(operateObj);   

    
    form.action=form.action+"?operate=createNewFile"
    form.method="POST"; 
    form.encoding="multipart/form-data";
    form.submit();  
    
}


猜你喜欢

转载自blog.csdn.net/longlongriver/article/details/6757405
今日推荐