Jsf p:未激发fileUpload方法
我有一个带有p:fileUpload的表单,当我提交表单时,所有方法都不会被激发 这是我的xhtml: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"/>
<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>