PrimeFaces简单的fileUpload:NullPointerException

时间:2014-11-02 17:09:24

标签: jsf file-upload primefaces nullpointerexception

我尝试制作一个简单的文件上载:

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

谢谢!

1 个答案:

答案 0 :(得分:0)

根据primefaces_user_guide

  • 自动:这是默认模式,PrimeFaces尝试通过检查最佳方法来检测最佳方法 运行时环境,如果JSF运行时至少选择了2.2本机上传器,则另行选择。
  • native :纯模式使用servlet 3.x Part API上传文件,如果JSF运行时小于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

@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);
        }
    }

}