当我输入特殊字符(ö,ä,ñ,..)时,通过h:commandbutton发送的值有问题。当通过ajax请求(例如,对值进行更改侦听器或a4j:commandbutton)提交值时,所有工作都可以找到。但是,当通过h:commandbutton提交值时,收到的值会出现乱码。在JBoss 7上对JSF 2中的POST请求进行编码
我试过根据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()在豆类操作方法返回UTF-8(如要求在评论),它看起来像过滤器的问题。 当通过h:commandButton提交表单时,request.getCharacterEncoding()
在我添加的UTF过滤器的doFilter()方法的开始处返回null。但request.parametersParsed
已经如此。
当通过ajax request.getCharacterEncoding()
提交的值已经是UTF-8。
因此,它看起来像编码设置不同,其他一些过滤器已经解析了参数。 request.context.filterConfigs
中唯一的其他过滤器是org.jboss.weld.servlet.ConversationPropagationFilter
。加上Picketlink可能已经在这个时候读取了参数。
编辑2: 在本thread in the PL forum讨论这似乎是在Picketlink的错误。还请检查相关的PL issue。
是的,我正在使用Facelets。 Chrome使用表单在页面的响应标题中显示“Content-Type:text/html; charset = UTF-8”。 – Markus 2013-02-22 19:15:05
好的。该字符编码是否是链中第一个过滤器?如果某个其他过滤器调用了'getParameter()',那么设置它就太迟了。在调试的同时,当你在bean的action方法中打印时,ExternalContext#getRequestCharacterEncoding()会说什么? – BalusC 2013-02-22 19:21:35
它是web.xml中的唯一过滤器,但我使用Picketlink进行身份验证。这可能会从请求中读取参数。但是,ExternalContext#getRequestCharacterEncoding()会返回utf-8,而不管过滤器是否处于活动状态。 – Markus 2013-02-22 23:26:27