我有一个带有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);
}
我的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()不是调用...
由于
编辑: 我的bean的所有代码:
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);
}
}
答案 0 :(得分:1)
从你提供的内容来看,我认为你到目前为止已经做得很好。但是,您仍需要处理两件事:
.jar
文件导入您的资料库文件夹。web.xml
中没有其他过滤器或任何使用@WebFilter
注释的类,这些过滤器可能会在PrimeFaces过滤器之前读取HttpServletRequest#getInputStream()
,因为它可能是只读一次。 答案 1 :(得分:1)
你也在使用prettyfaces?然后尝试(设置调度员):
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
答案 2 :(得分:0)
我有一个类似的问题,表单未提交,并且从未调用过setters方法,添加
<f:ajax event="change"/>
在组件内部您想要提交的内容。还
"immediate=true"
关于组件本身。思想可能对其他人有所帮助。