【问题标题】:PrimeFaces simple fileUpload: NullPointerExceptionPrimeFaces 简单文件上传:NullPointerException
【发布时间】:2014-11-02 17:09:24
【问题描述】:

我尝试做一个简单的文件上传:

<h:form enctype="multipart/form-data">
   <p:fileUpload value="#{catastrofes.file}"  mode="simple"></p:fileUpload>
   <p:separator/>
   <h:commandButton value="Dummy Action" action="#{catastrofes.dummyAction}" ajax="false"></h:commandButton>
</h:form>

但是当我提交时,得到file = null 并提出NullPointerExceptionhere 类似的问题,但答案对我不起作用,有什么想法吗?

这是我的托管 bean:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.primefaces.model.UploadedFile;

@ManagedBean(name="catastrofes")
@RequestScoped
public class CatastrofesBean {

    private UploadedFile file;

    public String dummyAction() {
        System.out.println("Uploaded File Name Is :: " + file.getFileName() + " :: Uploaded File Size :: " + file.getSize());
        return "";
    }

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }
}

还有我的 web.xml:

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>auto|native|commons</param-value>
</context-param>
<filter>
    <filter-name>Primefaces FileUpload Filter</filter-name>
    <filter-class>
        org.primefaces.webapp.filter.FileUploadFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>Primefaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

谢谢!

【问题讨论】:

  • 你永远不会为你的文件赋值。
  • 抱歉@Sybren,但我不明白,你指派值是什么意思?
  • 你只声明了 file ,但没​​有赋值,所以你的变量是 null 并且你得到一个空指针异常。
  • 尝试扩大 backing bean 的范围,也许是 @ViewScoped

标签: jsf file-upload primefaces nullpointerexception


【解决方案1】:

根据 primefaces_user_guide

  • auto:这是默认模式,PrimeFaces 通过检查 runtime 环境,如果 JSF runtime 至少是 2.2 则选择 native uploader,否则为 common。
  • native:Native 模式使用 servlet 3.x Part API 上传文件,如果 JSF runtime 小于 2.2 并抛出异常。
  • commons:此选项选择commons fileupload,无论环境如何,优点是 这个选项是它甚至可以在 Servlet 2.5 环境中工作。

您应该只选择一个选项,而不是粘贴所有这三个选项。 如果你的项目中有commons-fileupload库,建议你选择commons。

在 web.xml 中

<context-param>
   <param-name>primefaces.UPLOADER</param-name>
   <param-value>commons</param-value>
</context-param>

xhtml

<h:form enctype="multipart/form-data">        
    <p:growl id="messages" showDetail="true" />

    <p:fileUpload value="#{fileUploadView.file}" mode="simple" />

    <br /> <br />

    <h:commandButton value="Dummy Action" 
                     action="#{fileUploadView.upload}">
    </h:commandButton>
</h:form>

托管豆

@ManagedBean
@RequestScoped
public class FileUploadView {

    private UploadedFile file;

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }

    public void upload() {
        System.out.println("Uploaded File Name Is :: " + 
                file.getFileName() + 
                " :: Uploaded File Size :: " + file.getSize());
        if(file != null) {
            FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, message);
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2014-04-22
    • 2021-11-11
    相关资源
    最近更新 更多