猜测:
JSF应用的第一个页面,jsf默认采用ISO-8859-1编码;
后续页面,客户端浏览器向jsf请求的时候,同时告诉JSF自己当前接受的编码,JSF据此将后续页面按客户端编码方式进行编码。
测试:
页面链接加入中文参数,action到managed bean的方法
在managed bean的方法中,
FacesContext context = FacesContext.getCurrentInstance();
Map paramMap = context.getExternalContext().getRequestParameterMap();
String catName = (String) paramMap.get("ParamName");
String enc = context.getExternalContext().getRequestCharacterEncoding();
if (enc == null) {
catName = new String(catName.getBytes("ISO8859-1"), "UTF-8");
} else {
catName = new String(catName.getBytes(enc), "UTF-8");
}
第一个页面取得的enc为null,后续页面取得enc不为空,中文解码正确。