當我輸入特殊字符(ö,ä,ñ,..)時,通過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