primefaces4.0提供了强大的文件上传功能,可以轻松的实现文件上传下载。
primefaces上传文件只需要在web.xml中增加配置就可以了。具体配置如下:
<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> <init-param> <param-name>uploadDirectory</param-name> <param-value></param-value> </init-param> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>
其中<init-param>中的参数随便写。
虽然文件上传很方便,但在用的过程中就遇到了一个问题:中文文件上传文件名乱码。找了很多资料,有人说写转换器,但最终也是最简单的办法 就是写过滤器,用来设置请求、响应的编码。
@Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { arg0.setCharacterEncoding("UTF-8"); arg1.setCharacterEncoding("UTF-8"); arg2.doFilter(arg0, arg1); }
<filter> <filter-name>Character Encoding Filter</filter-name> <filter-class>com.lgm.common.web.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>Character Encoding Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>
完成上述操作后,会发现表单提交中文正常,但上传文件的文件名还是有乱码。顿时就无语了。后来找到原因自己都一阵无语,在web.xml中,如果有多个过滤器 还是有顺序问题的。
<!-- 字符编码过滤 --> <filter> <filter-name>Character Encoding Filter</filter-name> <filter-class>com.lgm.common.web.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>Character Encoding Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <!-- primefaces文件上传配置 --> <filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> <init-param> <param-name>uploadDirectory</param-name> <param-value></param-value> </init-param> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>
这样配置之后,中文乱码问题就解决了。