JSF 2.2 h:selectOneMenu验证错误。基于非英语字符?

时间:2014-02-16 21:05:18

标签: jsf-2.2 glassfish-4

我的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,à̧à£ààààààààààààààààààààààààààààààààààààààààààààààà̧àààààà̧̧àà̧̧]

导致价值无效。

我想,在某个地方,我确实错过了一个字符编码相关的设置。

非常感谢任何帮助。感谢。

1 个答案:

答案 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);
    }
   }

因为编码错误,只有在第一次调用验证时才会出错。 后来,没有问题了。?

无论如何,它现在有效。

此致