【问题标题】:NullPointerException when uploading file using Struts 2使用 Struts 2 上传文件时出现 NullPointerException
【发布时间】:2011-11-19 11:24:55
【问题描述】:

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

【问题讨论】:

    标签: tomcat file-upload struts


    【解决方案1】:

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

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

    这里有一些额外的问题:

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

    解决了这些问题后,您的代码将按原样运行。您是否修改了默认拦截器堆栈?

    【讨论】:

    • 我尝试使用 setter 和 getter 方法来访问文件,但没有成功。我仍然得到文件属性的空值。我已经尝试过了,但没有结果,为了确保我再次尝试,结果仍然是 null :)
    • @MohammedSwafvan 请使用内置机制使用的代码和配置以及您正在部署的库更新您的问题。
    • @MohammedSwafvan 当您尝试打印名称时,您会在哪里获得 NPE?日志中有任何启动错误?您正在部署哪些库?
    • @MohammedSwafvan 你如何显示初始表格?换句话说,如果你只是去/upload/upload.action,你会看到表单,但不会有任何文件上传,因为你还没有提交表单。
    • 实际上执行是在调试时进入动作类,但文件的值为空,如果给定,我将以相同的形式获取其他参数。而我的动作名称是uploadfile.action,上传是包名。无论如何,我将操作更改为上传文件。问题依然存在。我没有更改默认堆栈,我不知道它是什么。
    【解决方案2】:

    我建议您将 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、Firefox 和 Chrome 上使用 FileUpload 拦截器在 NetBeans 6.9 上进行了文件上传项目,一切都很好。请不断更新您的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2015-01-31
      • 2014-10-17
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多