当我输入特殊字符(ö、ä.ñ、..)时,我对通过 h:commandbutton 发布的值有疑问。当值通过 ajax 请求(例如值的更改侦听器或 a4j:commandbutton)提交时,一切正常。但是,当通过 h:commandbutton 提交值时,收到的值会出现乱码。
我尝试根据BalusC 撰写的文章设置所有内容。
我在 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"/>
添加了一个过滤器,用于设置请求的字符编码。但是,这并没有改变任何东西,如果我读取获取参数映射(在设置编码之前或之后),参数就会在那里混乱。
还有什么我错过的吗?
我已经尝试过使用 JBoss 7.1.0 和 7.1.1 以及 Richfaces 4.1.0。
编辑:
即使 ExternalContext#getRequestCharacterEncoding() 在 bean 操作方法中返回 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: 正如PL 论坛中的这个线程中所讨论的,这似乎是 Picketlink 中的一个错误。还要检查相关的PL 问题。