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上,事情很好。请继续更新您的结果。