在JBoss 7上的JSF 2中编码POST请求

时间:2013-02-22 17:08:27

标签: character-encoding richfaces jboss7.x

当我输入特殊字符(ö,ä.ñ,..)时,通过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

1 个答案:

答案 0 :(得分:0)

到目前为止,一切看起来都很好。

如果在您的字符编码过滤器设置了请求正文字符编码之前已经访问(并因此隐式解析)了请求正文,则此构造将失败。然后为解析请求体设置字符编码为时已晚。

根据评论,PicketLink似乎是罪魁祸首。您需要告诉它使用UTF-8,或者如果不可能,请在他们的开发团队报告错误/问题报告。这一切至少无法控制JSF,因此也不是JSF相关的问题。