我的jsf facelets webapplication使用h:selectonemenu,其中填充了(来自mysql DB)名称,用英文和泰文字符编写。
部署在glassfish-3.1.2.2 jsf 2.1上,根本没有问题。
部署在glassfish-4.0 jsf 2.2 EE7上, 如果选择了用泰语写的名字(英文名称没问题), 我得到的验证错误值无效。
谷歌周围几个小时后,我找不到任何解决这个问题的方法。 似乎我是唯一一个有这个问题的人。出于调试原因,我确实在.xhtml中添加了自定义转换器:
<h:selectOneMenu id="selCust" value ="#{OfficeBean.selectcust}" converter="#{zConverter}">
在支持Bean中有一个System.out.println():
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
String submittedValue = value; System.out.println(“转换器值:”+ submittedValue);
从服务器3.1.2.2日志文件中我得到:
[#| 2014-02-18T01:45:16.184 + 0800 | INFO | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 125; _ThreadName = Thread- 2; |转换器值:A-117,บริษัทโมเดอร์นฟู้ดอินดัสตรี้จํากัด|#]
从Server 4.0日志文件中我得到:
[2014-02-17T19:13:47.055 + 0800] [glassfish 4.0] [INFO] [] [] [tid:_ThreadID = 18 _ThreadName = Thread-3] [timeMillis:1392635627055] [levelValue:800] [ [ 转换器值:A-117,à̧à£ààààààààààààààààààààààààààààààààààààààààààààààà̧àààààà̧̧àà̧̧]
导致价值无效。
我想,在某个地方,我确实错过了一个字符编码相关的设置。
非常感谢任何帮助。感谢。
答案 0 :(得分:0)
我确实添加了上面提到的zConverter:
if(submittedValue.contains("à")){
try {
submittedValue = new String (value.getBytes ("iso-8859-1"), "utf-8");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(zConverter.class.getName()).log(Level.SEVERE, null, ex);
}
}
因为编码错误,只有在第一次调用验证时才会出错。 后来,没有问题了。?
无论如何,它现在有效。
此致