2012-07-20 40 views
0

我有一個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; 



} 

不知道我在做什麼錯在這裏。希望得到任何幫助/提示

-

+0

哪一個操作系統正在工作,哪一個不工作?你得到的任何錯誤/異常? – 2012-07-21 13:23:40

+0

嗨Umesh。我最初的帖子中的代碼是不起作用的。 Apache日誌的日誌文件中沒有錯誤。我只在字段「secImage」中得到「」無效的字段值......在動作錯誤消息中。除此之外,每件事情都很順利。 – user1541564 2012-07-21 14:32:29

+0

同樣在上面的例子中,我錯過了實際存在的文件和內容類型的setter/getter方法。我不知道爲什麼我得到**無效的字段值錯誤**。這甚至在我的行動方法被調用之前就發生了。似乎Struts在調用Action類之前正在驗證字段。但我不確定它在哪裏以及爲什麼拒絕上傳的文件。 – user1541564 2012-07-21 14:36:41

回答

0

採取另一種varible名字是<s:file name的類型的文件類型生成setter和上FileUtils.copyFile(this.secImage, fileToCreate);

+0

謝謝maabujji ..添加新變量後它工作正常。謝謝 – user1541564 2012-07-26 16:34:55

0

1吸氣劑 private File secImage; getter &setters()做的操作 - 檢查表格線在你的JSP絕包含:ENCTYPE = 「的multipart/form-data的」

例如:<s:form theme="simple" enctype="multipart/form-data" > 注:如果你的JSP擴展,家長也需要包含該行。

2 - 檢查您定義的setter和getter方法是否正確。 struts2 FileUpload Problem

希望得到這個幫助。