使用Struts 2上传文件时出现NullPointerException

时间:2011-11-19 11:24:55

标签: tomcat file-upload struts

这是JSP

<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>

动作类

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,因为属性uploadedfile为null。文件上传无法正常工作。为什么该变量始终为null。我的操作系统是Ubuntu Linux 11.4,Web服务器 - Apache Tomcat 6. IDE- Netbeans。

2 个答案:

答案 0 :(得分:0)

可能是因为Struts 2已经实现了完整的文件上传功能,而无需手动完成所有工作。

请参阅file upload docs并使用框架已经为您提供的内容。

以下是一些其他问题:

  • 除非您将默认主题设置为"simple",否则表单生成的HTML将无效;默认主题在表行/单元格中发出表单输入元素。
  • "action"标记的<s:form>属性应该是操作的名称,不带 .action后缀。

修复这些问题后,您的代码将按原样运行。你修改过默认的拦截器堆栈吗?

答案 1 :(得分:0)

我建议您将FileUpload Interceptor添加到操作的拦截器堆栈中。您可以参考以下文档了解如何:

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上运行了一个带有fileupload的项目,Firefox&amp;使用FileUpload拦截器的Chrome对NetBeans 6.9的限制和事情都很好。请不断更新结果。