我有一個struts 2應用程序,其中2頁有struts文件上傳。一個完美的作品,而另一個不會工作。我給我secImage「現場的字段值無效 「」。Struts 2 FileUpload不工作
下面是JSP代碼
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib uri="http://displaytag.sf.net" prefix="display" %>
<html>
<head>
</head>
<body>
<%@ include file="header.jsp" %>
<s:form action="Test" method="POST" style="width:90%;">
Another form here......
</s:form>
<s:form action="Test" method="POST" enctype="multipart/form-data">
<s:push value="secVul">
<s:hidden name="vulId" />
<s:hidden name="scanHistory.scanId" />
<s:textfield name="protocol" label="Protocol" style="width: 80%;" />
<s:textarea name="description" label="Description" style="width: 80%;" />
<s:textarea name="solution" label="solution" />
<more form elements here>sdfasdfasdfasd
<s:file name="secImage" label="Image to Upload" size="40"/>
<s:submit value="Add/Update" align="center"/>
</s:push>
</s:form>
<%@ include file="footer.jsp" %>
</body>
</html>
這裏是Struts配置
<interceptor-ref name="fileUpload">
<param name="maximumSize">909715200</param>
<param name="allowedTypes">
text/xml,application/octet-stream,image/png,image/gif,image/jpeg,image/pjpeg
</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<action name="Test" method="saveOrUpdate" class="com.Test">
<result name="success" type="redirect">listVulsMGR</result>
<result name="input">/WEB-INF/pages/secVuls.jsp</result>
<result name="error">/WEB-INF/pages/secVuls.jsp</result>
</action>
Action類代碼:
public class Test extends ActionSupport implements ModelDriven<Test>, Preparable,ServletRequestAware {
private HttpServletRequest servletRequest;
private static final Logger logger = Logger.getLogger(ListVulsActions.class);
private File secImage;
private String secImageContentType;
private String secImageFileName;
private HashMap userFilters = new HashMap();
public Test() {
}
public String saveOrUpdate() {
try {
ServletContext context = ServletActionContext.getServletContext();
String filePath = context.getInitParameter("UploadDirectory");
logger.debug("Server path:" + filePath);
logger.debug("this.secImageFileName " + this.secImageFileName);
File fileToCreate = new File(filePath, this.secImageFileName);
FileUtils.copyFile(this.secImage, fileToCreate);
}
addActionMessage("successfully added/updated.");
return SUCCESS;
} catch (Exception ex) {
logger.error("Error in Test", ex);
addActionError("Error occured in Test. Please contact your administrator.\n" + ex.getMessage());
return ERROR;
}
}
public File getSecImage() {
System.out.println(secImage.getName());
return secImage;
}
/**
* @param secImage the secImage to set
*/
public void setSecImage(File secImage) {
System.out.println(secImage.getName());
this.secImage = secImage;
}
/**
* @return the secImageContentType
*/
public String getSecImageContentType() {
System.out.println(secImageContentType);
return secImageContentType;
}
/**
* @param secImageContentType the secImageContentType to set
*/
public void setSecImageContentType(String secImageContentType) {
System.out.println(secImageContentType);
this.secImageContentType = secImageContentType;
}
/**
* @return the secImageFileName
*/
public String getSecImageFileName() {
System.out.println(secImageFileName);
return secImageFileName;
}
/**
* @param secImageFileName the secImageFileName to set
*/
public void setSecImageFileName(String secImageFileName) {
System.out.println(secImageFileName);
this.secImageFileName = secImageFileName;
}
@Override
public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
}
不知道我在做什麼錯在這裏。希望得到任何幫助/提示
-
哪一個操作系統正在工作,哪一個不工作?你得到的任何錯誤/異常? – 2012-07-21 13:23:40
嗨Umesh。我最初的帖子中的代碼是不起作用的。 Apache日誌的日誌文件中沒有錯誤。我只在字段「secImage」中得到「」無效的字段值......在動作錯誤消息中。除此之外,每件事情都很順利。 – user1541564 2012-07-21 14:32:29
同樣在上面的例子中,我錯過了實際存在的文件和內容類型的setter/getter方法。我不知道爲什麼我得到**無效的字段值錯誤**。這甚至在我的行動方法被調用之前就發生了。似乎Struts在調用Action類之前正在驗證字段。但我不確定它在哪裏以及爲什麼拒絕上傳的文件。 – user1541564 2012-07-21 14:36:41