2013-05-03 68 views
2

我有一个primefaces文件上传器的问题,当上传完成fileUploadListener中的处理器方法没有调用时,我在方法启动中放置了一个断点并且执行正常进行因为它是不存在的,没有例外发生:Primefaces文件上传器不会调用处理器方法

这是我的文件上传:

    <h:form enctype="multipart/form-data"> 
        <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}" 
         mode="advanced" update="messages" sizeLimit="100000" 
         allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
         <h:message style="color:red;margin:8px;"/> 
         <p:growl id="messages" showDetail="true" /> 
        </h:form> 

,这是处理程序:

@ManagedBean(name="fileUploadController") 
@SessionScoped 
public class FileUploadController { 

public void handleFileUpload(FileUploadEvent event) { 
    FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
} 

web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 
<display-name>Ga</display-name> 
<welcome-file-list> 
    <welcome-file>pages/HomePage.jsf</welcome-file> 
</welcome-file-list> 
<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> 

<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 
<context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
</context-param> 
<listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
</listener> 

+0

你的组件封装在''? – skuntsel 2013-05-03 19:46:08

+0

是的,它是封闭的 – 2013-05-03 19:53:48

+0

是否依赖导入(第2.2章)和过滤器设置(第3.37)?参考章节来自[Primefaces 3.5用户指南](http://primefaces.googlecode.com/files/primefaces_users_guide_3_5.pdf)。 – skuntsel 2013-05-03 20:04:52

回答

2

你应该以下过滤器添加到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> 

EDIT1:

而且this question可以是有益的; )

EDIT2:

亲爱的朋友,请消除在web.xml的过滤器映射之一,它的复制。

+0

我已经添加了它 – 2013-05-03 21:36:07

+0

请问您可否向我提供web.xml? – 2013-05-03 21:42:57

+0

好的,请参阅编辑 – 2013-05-03 22:12:34