0

当我输入特殊字符(ö、ä.ñ、..)时,我对通过 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.filterConfigsorg.jboss.weld.servlet.ConversationPropagationFilter. 另外,Picketlink 可能已经读取了此时的参数。

编辑 2: 正如PL 论坛中的这个线程中所讨论的,这似乎是 Picketlink 中的一个错误。还要检查相关的PL 问题

4

1 回答 1

1

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

只有在您的字符编码过滤器设置请求正文字符编码之前,其他东西已经访问(并因此隐式解析)请求正文时,此构造才会失败。然后为解析请求正文设置字符编码为时已晚。

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

于 2013-02-23T17:13:34.820 回答