Jsf p:未激发fileUpload方法

Jsf p:未激发fileUpload方法,jsf,file-upload,primefaces,Jsf,File Upload,Primefaces,我有一个带有p:fileUpload的表单,当我提交表单时,所有方法都不会被激发 这是我的xhtml: <h:form enctype="multipart/form-data"> <p:messages id="messages" showDetail="true"/> <p:fileUpload value="#{uploadBean.file}" mode="simple" id="fileUploadId"/>

我有一个带有p:fileUpload的表单,当我提交表单时,所有方法都不会被激发

这是我的xhtml:

<h:form enctype="multipart/form-data">
          <p:messages id="messages" showDetail="true"/>
          <p:fileUpload value="#{uploadBean.file}" mode="simple" id="fileUploadId"/>
          <p:commandButton value="Envoyer ce fichier" process="@form" update="messages fileUploadId" actionListener="#{uploadBean.upload}"/>
</h:form>
my web.xml:

<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>
方法setFile()未被调用

谢谢

编辑: 我的bean的所有代码:

public void setFile(final UploadedFile file)
  {
    System.out.println("Dans le setFile");
    this.file = file;
  }

  public void upload()
  {
    System.out.println("Dans le upload");
    System.out.println("Fichier : " + file.getFileName());
    FacesContext.getCurrentInstance().addMessage(null, msg);
  }
import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

@ManagedBean
@ViewScoped
public class UploadBean implements Serializable
{
  /**
   * 
   */
  private static final long serialVersionUID = 556636819990963651L;

  private UploadedFile      file;

  public UploadedFile getFile()
  {
    System.out.println("Dans le getFile");
    return file;
  }

  public void setFile(final UploadedFile file)
  {
    System.out.println("Dans le setFile");
    this.file = file;
  }

  public void upload()
  {
    System.out.println("Dans le upload");
    // System.out.println("Fichier : " + file.getFileName());

    FacesMessage msg;
    if (file == null)
    {
      msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Raté ! ", "Le fichier vaut null.");
      System.out.println("la variable file : null");
    }
    else
    {
      msg = new FacesMessage("Ouép ! ", file.getFileName() + " is uploaded.");
      System.out.println("Le nom du fichier uploader est : " + file.getFileName());
    }
    FacesContext.getCurrentInstance().addMessage(null, msg);
  }
}

从你提供的情况来看,我认为到目前为止你做得是正确的。但是,您仍然需要注意两件事:

  • 您需要下载
    .jar
    文件并将其导入库文件夹
  • 您还需要确保
    web.xml
    中没有其他过滤器,或者使用
    @WebFilter
    注释的任何类都不会在PrimeFaces的过滤器之前读取
    HttpServletRequest#getInputStream()
    ,因为它只能读取一次
    我有一个类似的问题,表单没有提交,setters方法也没有被调用,add

    <f:ajax event="change"/> 
    

    在组件本身上。思考可能对其他人有帮助。

    你也在使用漂亮的面孔吗?然后尝试(设置调度程序):

    
    PrimeFaces文件上载筛选器
    Facesservlet
    向前地
    
    我可以从堆栈跟踪中提取的关键字是
    java.lang.NullPointerException
    。我建议你从那里开始,准确地查找
    null
    @Mr.J4mes:这是我的var“文件”。你能从你的
    setFile
    方法中删除
    final
    这个词吗?嗯。。。我能想到的最后一个问题是,您为您的范围导入了错误的包。你能提供你上传的Bean的所有代码吗?我已经用我的Bean的所有代码编辑了我以前的文章1)我已经下载了这两个文件(并导入到我的库中)。2) 我的web.xml中没有其他过滤器,也没有读取
    HttpServler\getInputStream()
    的类。。。我不明白为什么它不起作用……使用PrimeFaces代码(未修改),我可以在网络上的Firebug文件中看到,但这是不调用我的方法。如果我添加ajax,方法是调用的,但是我在Firebug的network选项卡上看不到这个文件……我试着测试了你的代码,它在我这边起了作用。我还没有找到任何其他的原因来解释为什么它对你不起作用。好的,谢谢。我不知道为什么我这边不行^ ^你这边都行。。。您有所有(两个)方法(setFile和Upload)吗?使用相同的代码,它在您这方面工作得很好,而不是在我这方面。真的很奇怪。。。
    <f:ajax event="change"/> 
    
    "immediate=true"
    
    <filter-mapping>
       <filter-name>PrimeFaces FileUpload Filter</filter-name>
       <servlet-name>Faces Servlet</servlet-name>
       <dispatcher>FORWARD</dispatcher>
    </filter-mapping>