当我输入特殊字符(ö,ä.ñ,..)时,通过h:commandbutton发布的值有问题。当通过ajax请求(例如值上的更改侦听器或a4j:commandbutton)提交值时,一切都可以找到。但是,当通过h:commandbutton提交值时,接收的值会出现乱码。
我已尝试根据article written by BalusC设置所有内容。
我在JBoss的standalone.xml中设置了URI enconding:
<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
添加了一个过滤器,用于设置请求的字符编码。然而,这并没有改变任何东西,如果我读取了参数地图(在设置编码之前或之后),参数就会搞乱。
还有什么我错过的吗?
我尝试过使用JBoss 7.1.0和7.1.1以及richfaces 4.1.0。
修改
即使ExternalContext#getRequestCharacterEncoding()在beans动作方法中返回UTF-8(如注释中所述),看起来过滤器也是问题所在。
当表单通过h:commandButton提交时,request.getCharacterEncoding()
在我添加的UTF过滤器的doFilter()方法的开头返回null。但是request.parametersParsed
已经是真的了。
通过ajax request.getCharacterEncoding()
提交的值已经是UTF-8。
所以看起来编码设置不同,其他一些过滤器已经解析了参数。 request.context.filterConfigs
中唯一的其他过滤条件为org.jboss.weld.servlet.ConversationPropagationFilter
。 Plus Picketlink可能已经在此时读取了参数。
编辑2: 正如本thread in the PL forum中所讨论的,这似乎是Picketlink中的一个错误。另请查看相关的PL issue。
答案 0 :(得分:0)
到目前为止,一切看起来都很好。
如果在您的字符编码过滤器设置了请求正文字符编码之前已经访问(并因此隐式解析)了请求正文,则此构造将失败。然后为解析请求体设置字符编码为时已晚。
根据评论,PicketLink似乎是罪魁祸首。您需要告诉它使用UTF-8,或者如果不可能,请在他们的开发团队报告错误/问题报告。这一切至少无法控制JSF,因此也不是JSF相关的问题。