JSF 2.0(基于Primefaces 3.4.2) 中文乱码的处置方案

JSF 2.0(基于Primefaces 3.4.2) 中文乱码的处理方案

最近在用JSF 2.0(基于Primefaces 3.4.2)做一个WEB的项目,开发的过程中有两个问题一直烦扰着我

(1)很多时候在需要提交页面中的数据的时候,必须要点两次提交按钮,才可以提交相应的数据

(2)中文乱码问题.表现为:

      2.1 如果在一个页面点击两次"创建"按钮的时候会出现乱码的问题.以及对一条数据进行更新的时候也会设计到乱码的问题.

      2.2 如果按钮设置了 ajax="false"属性,也会出现乱码问题


经过多次的实践,以及结合PrimeFaces官网中的例子的源码(http://code.google.com/p/primefaces/source/browse/examples/trunk/showcase/src/main/java/org/primefaces/examples?r=3516),进行了如下总结

(1)如果没有特殊的需求 尽量将button的ajax的属性设置为false.

回顾整个开发过程,不管是文件的上传下载问题,还是iReport的报表文件的导出问题,以及这个该死的数据提交问题,都和ajax="false" 脱离不了关系

(2)通过Servlet Filter处理中文乱码问题

在处理乱码的过程中用了很多的方法,可是效果都不好,后来发现Primefaces网站没有中文乱码的问题,后来通过源码发现原来是定义了一个servlet filter.

Servlet filter 代码:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
            ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void destroy() {

    }

}

Servlet filter web.xm l配 置

<filter>
		<filter-name>Character Encoding Filter</filter-name>
		<filter-class>com.foreign.filter.CharacterEncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Character Encoding Filter</filter-name>
		<servlet-name>Faces Servlet</servlet-name>
	</filter-mapping>