p: метод fileUpload не запущен - PullRequest
1 голос
/ 09 января 2012

У меня есть форма с 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>

мой боб:

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

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>

В след, я просто:

Infos: Dans le upload
Grave: Réception de «java.lang.NullPointerException» lors de l’invocation du listener d’action «#{uploadBean.upload}» du composant «j_idt11»
Grave: java.lang.NullPointerException

Метод setFile () не вызывается ...

Спасибо

изменить: Весь код моего боба:

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

Ответы [ 3 ]

1 голос
/ 26 января 2012

Вы тоже используете симпатичные лица? Затем попробуйте (установите диспетчер):

<filter-mapping>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <servlet-name>Faces Servlet</servlet-name>
   <dispatcher>FORWARD</dispatcher>
</filter-mapping>
1 голос
/ 09 января 2012

Из того, что вы предоставили, я думаю, что вы сделали правильно до сих пор.Тем не менее, есть еще 2 вещи, о которых вам нужно позаботиться:

  1. Вам необходимо скачать common-io & common-fileupload и импортировать *Файл 1008 * в папку вашей библиотеки.
  2. Вам также необходимо убедиться, что в web.xml или других классах, помеченных @WebFilter, нет других фильтров, которые могут читать HttpServletRequest#getInputStream() перед фильтром PrimeFaces.потому что его можно прочитать только один раз.
0 голосов
/ 17 января 2012

У меня была похожая проблема, форма не была отправлена ​​и методы установки никогда не вызывались, добавьте

<f:ajax event="change"/> 

внутри компонента, который вы хотите отправить. также

"immediate=true"

на самом компоненте. Мысль может быть полезна для других ..

...