一般在上传文件的时候,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();
}