servlets - PrimeFaces 文件上传

标签 servlets jsf-2 primefaces jspx

我在一个项目中使用 jsp/Servlet,我决定使用 PrimeFaces 迁移到 JSF,我在尝试使用 PrimeFaces fileupload 控件上传文件时遇到了问题,然后当我将它配置到 web.xml 中时它运行良好,现在所有旧的jsp文件上传方式都不起作用的问题:

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

最佳答案

的确,一个HTTP请求只能被解析一次。如果您需要解析两次,客户端将不会发送第二次。您的问题表明 PrimeFaces 文件上传过滤器出于某种原因也在普通 JSP/Servlet 请求上调用,因此在普通 JSP/Servlet 有机会解析它以供自己使用之前解析 JSF 的上传。这不应该发生。

您只需要在 JSF 请求上映射 PrimeFaces 文件上传过滤器,而不是在普通的 JSP/Servlet 请求上。您通常通过将其映射到 FacesServlet 来实现。

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

(<servlet-name> 必须与 <servlet> 类的 FacesServlet 定义中使用的值完全相同;<filter-name> 显然与文件上传过滤器类的 <filter> 定义中使用的值完全相同)

或者,如果出于某些不明显的原因直接在 JSF 页面中使用旧的 JSP/Servlet 文件上传方法,那么您需要将 PrimeFaces 文件上传过滤器映射到更具体的 URL 模式上,仅覆盖包含 PrimeFaces 的页面文件上传组件。

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

(如果您将 FacesServlet 映射到例如 *.jsf 而不是 *.xhtml ,那么您显然应该将 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>

关于servlets - PrimeFaces 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14025997/

相关文章:

java - GWT RPC - 多个 RPC 服务

java - 为什么 HttpServletRequest.getRemoteAddr() 在 Java servlet 中不起作用?

java - 使用 spring security 创建自定义登录

jsf-2 - 如何在 Facelet 页面中包含外部 javascript 文件?

hibernate - JSF <h :inputText/> character encoding issue

java - 用于开发的轻型 Java servlet 容器

java - 通过 Apache Commons 上传流文件时,数据存储在哪里?

spring - JSF,如何启动一个单独的线程来处理pdf生成并直接渲染 View

jsf - f :ajax listener not called for h:selectBooleanCheckbox

jsf-2 - 如何在 PrimeFaces 中使用共享错误消息对话框