2011-11-19 48 views
0

文件時,這是JSP上傳的NullPointerException使用Struts 2

<s:form action="uploadfile.action" enctype="multipart/form-data" method="POST" cssClass="bodyClass"> 
    <tr> 
     <td> 
      Image: 
     </td> 
     <td style="width: 200px;"> 
      <s:file id='image' name='uploadedfile' cssClass="formTextField" /> 
     </td> 
     <td> 
      <input type="submit" value="Upload" class="button"/> 
     </td> 
    </tr> 

</s:form> 

這是Struts的.XML

<package name="upload" namespace="/upload" extends="struts-default"> 
      <action name="uploadfile" class="com.secureweb.web.upload.UploadAction"> 
       <result name="uploadImage">/pages/fileupload/uploadimage.jsp</result> 
      </action> 
    </package> 

Action類

public class UploadAction extends ActionSupport { 
    private File uploadedfile; 

    public String execute() throws Exception { 
     try { 
      System.out.println(uploadedfile.getName()); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
     return "uploadImage"; 
    } 

    public File getUploadedfile() { 
     return uploadedfile; 
    } 

    public void setUploadedfile(File uploadedfile) { 
     this.uploadedfile = uploadedfile; 
    } 
} 

在我的項目庫

commons-beanutils-1.7.0.jar 
    commons-lang-2.3.jar 
    displaytag-1.2.jar 
    displaytag-export-poi-1.2.jar 
    displaytag-portlet-1.2.jar 
    log4j-1.2.14.jar 
    pljava.jar 
    postgresql-8.3-603.jdbc4.jar 
    postgresql-8.3-604.jdbc3.jar 
    cos.jar 

    Struts 2 2.1.8 Basic- commons-io-1.3.2.jar 
          commons-fileupload-1.2.1.jar 
          commons-logging-1.0.4.jar 
          freemarker-2.3.15.jar 
          ognl-2.7.3.jar 
          struts2-core-2.1.8.1.jar 
          xwork-core-2.1.6.jar 
    Then there is persistance.jar of EJB 
    And there is also Hibernate Library. 

沒有其他

結果爲NullPointerException,因爲屬性上傳文件爲空。文件上傳無法正常工作。爲什麼這個變量總是值爲null。我的操作系統是Ubuntu Linux 11.4,Web服務器 - Apache Tomcat 6. IDE- Netbeans。

回答

0

可能是因爲Struts 2已經實現了完整的文件上傳功能,而無需手動完成所有工作。

請參閱file upload docs並使用框架已經給您的東西。

這裏有一些其他問題:

  • 除非你已經設置的默認主題"simple",通過形式將無效生成的HTML;默認主題在表格行/單元格內發出表單輸入元素。
  • 屬性的<s:form>標籤應該是動作名稱而不是.action後綴。

修復這些問題後,您的代碼將按原樣運行。你修改了默認的攔截器棧嗎?

+0

我嘗試使用setter和getter方法來訪問該文件,但它不起作用。仍然我得到文件屬性的空值。我已經嘗試過,最後沒有結果,爲了確保我再次嘗試過,仍然結果爲空:) –

+0

@MohammedSwafvan請更新您的問題與代碼和配置與內置機制一起使用,重新部署。 –

+0

嗨,戴夫我更新了我的問題。請指教。 –

0

我建議您將FileUpload攔截器添加到動作的攔截器堆棧中。你可以參考下面的文檔瞭解如何:

http://struts.apache.org/2.0.6/docs/file-upload-interceptor.html

http://struts.apache.org/2.0.14/docs/file-upload.html

http://www.mkyong.com/struts2/struts-2-file-upload-example/

我最近的一個項目與文件上傳工作在Tomcat 6.0,火狐& Chrome的使用有限制的FileUpload攔截在NetBeans 6.9上,事情很好。請繼續更新您的結果。