Character encoding JBoss7上JSF2中POST请求的编码

Character encoding JBoss7上JSF2中POST请求的编码,character-encoding,richfaces,jboss7.x,Character Encoding,Richfaces,Jboss7.x,当我输入特殊字符(ö,ä.ñ,…)时,通过h:commandbutton发布的值有问题。通过ajax请求提交值时(例如,值的更改侦听器或a4j:commandbutton),所有内容都可以找到。但是,当通过h:commandbutton提交值时,收到的值会被篡改 我试着把一切都按计划安排好 我已经在JBoss的standalone.xml中设置了URI编码: <property name="org.apache.catalina.connector.URI_ENCODING" value=

当我输入特殊字符(ö,ä.ñ,…)时,通过h:commandbutton发布的值有问题。通过ajax请求提交值时(例如,值的更改侦听器或a4j:commandbutton),所有内容都可以找到。但是,当通过h:commandbutton提交值时,收到的值会被篡改

我试着把一切都按计划安排好

我已经在JBoss的standalone.xml中设置了URI编码:

<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"/>

添加了设置请求的字符编码的筛选器。然而,这并没有改变任何事情,如果我读取get参数映射(设置编码之前或之后),那么参数就会被弄乱

还有什么我错过的吗

我试过JBoss7.1.0、7.1.1和richfaces 4.1.0

编辑:

即使ExternalContext#getRequestCharacterEncoding()在beans操作方法中返回UTF-8(如注释中所述),看起来过滤器就是问题所在。 通过h:commandButton提交表单时,
request.getCharacterEncoding()
在我添加的UTF过滤器的doFilter()方法的开头返回null。但是
request.parametersParsed
已为true

当通过ajax
request提交值时,getCharacterEncoding()
已经是UTF-8

因此,似乎编码设置不同,其他一些过滤器已经解析了参数。
request.context.filterConfigs
中唯一的其他过滤器是
org.jboss.weld.servlet.ConversationPropagationFilter
。另外,Picketlink此时可能已经读取了参数

编辑2:
正如本文所讨论的,这似乎是Picketlink中的一个bug。同时检查相关的。

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

只有在字符编码筛选器设置请求正文字符编码之前,其他内容已经访问(并隐式解析)请求正文,此构造才会失败。然后,为请求主体的解析设置字符编码就太晚了


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

是的,我使用的是Facelets。Chrome显示“Content Type:text/html;charset=UTF-8”作为页面的响应标题,格式为.ok。字符编码过滤器是链中的第一个过滤器吗?如果其他筛选器调用了
getParameter()
,那么设置它就太晚了。在调试的同时,
ExternalContext#getRequestCharacterEncoding()
在bean的操作方法中打印它时会说什么?它是web.xml中唯一的过滤器,但我使用Picketlink进行身份验证。这可能会从请求中读取参数。但是,ExternalContext#getRequestCharacterEncoding()返回utf-8,与筛选器是否处于活动状态无关。然后一切看起来都正常。您的环境是否也设置为使用UTF-8?你到底是如何观察“乱码”的?通过
System.out.println()
?如果是这样的话,这个打印到哪里?IDE控制台?哪个IDE?我正在Ubuntu 12.10上使用Eclipse3.7.2。这些值看起来好像编码错误(ö->è),我正在Eclipse的调试模式中检查,稍后在DB中检查。下一页还显示了错误的值(如Ã)。我编辑了这个问题并提供了进一步的信息。是的,Picketlink以前读取过参数,我认为基本问题是JBoss硬编码了默认编码,而过滤机制不适合设置编码。为了便于参考,我在报告中询问了这个问题。作为一种解决方法,可以安装一个类似于过滤器的阀门。谢谢你的帮助。