2012-12-24 85 views
3

我使用JSP/Servlet的到一个项目,我已经决定使用PrimeFaces迁移到JSF,而尝试使用PrimeFaces FileUpload控件,然后上传文件时,我已经配置到web.xml中我所面临的一个问题是现在的问题是,所有旧的jsp文件上传方式都不起作用:PrimeFaces文件上传

DiskFileUpload upload = new DiskFileUpload(); 
List items = upload.parseRequest(request); 

回答

4

事实上,一个HTTP请求只能被解析一次。如果您需要解析两次,客户端不会再次发送它。你的问题表明PrimeFaces文件上传过滤器是出于某种原因还援引在一个普通的JSP/Servlet的请求,因此前平原JSP/Servlet的就有机会解析它自己使用解析为JSF上传。这不应该发生。

您需要映射只,而不是简单的JSP/Servlet的请求JSF请求PrimeFaces文件上传过滤器。你通常通过它映射到FacesServlet实现这一目标。

<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
</filter-mapping> 

(所述<servlet-name>必须完全如在FacesServlet类的<servlet>定义被使用的值相同;所述<filter-name>显然是完全一样在<filter> definiton文件上载过滤器类的被使用的值相同)

或者,如果旧的JSP/Servlet的文件上传方法是在JSF页面直接用于一些不明显的原因,那么你需要的PrimeFaces文件上传过滤图上只覆盖页面更具体的URL模式包含PrimeFaces文件上传com Ponent(波纳恩特)。

<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <url-pattern>/upload.xhtml</url-pattern> 
</filter-mapping> 

(如果你已经映射到例如*.jsf,而不是*.xhtmlFacesServlet,那么很显然你应该改变URL模式/upload.jsf

请注意,您可以指定多个<url-pattern>条目单个过滤器映射,这对于您有多个包含PrimeFaces文件上传组件的页面很有用。

<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <url-pattern>/upload1.xhtml</url-pattern> 
    <url-pattern>/upload2.xhtml</url-pattern> 
    <url-pattern>/upload3.xhtml</url-pattern> 
</filter-mapping> 
相关问题