2013-02-22 3 views
0

특수 문자 (ö, ä. ñ, ..)를 입력 할 때 h : commandbutton을 통해 POST 된 값에 문제가 있습니다. 값이 ajax 요청 (예 : 값의 변경 리스너 또는 a4j : commandbutton)을 통해 제출되면 모든 것이 작동합니다. 그러나 값이 h : commandbutton을 통해 제출되면 수신 된 값이 왜곡됩니다.JBoss 7의 JSF 2에서 POST 요청의 인코딩

article written by BalusC에 따라 모든 것을 설정하려고했습니다.

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

추가 요청의 문자 인코딩을 설정하는 필터 :

나는 보스 'standalone.xml의 URI의 enconding을 설정했습니다. 그러나 이것은 아무것도 변경하지 않습니다. 매개 변수가 param 맵을 읽는다면 (인코딩을 설정하기 전이나 후에) 엉망이됩니다.

내가 놓친 다른 항목이 있습니까?

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입니다. Plus Picketlink는 이미이 시점에서 매개 변수를 읽었을 것입니다.

편집 2 :이 thread in the PL forum에서 설명하고있는 바와 같이 이 Picketlink에서 버그가 수 있도록 보인다. 관련 PL issue도 확인하십시오.

+0

예, Facelets를 사용하고 있습니다. Chrome은 양식이있는 페이지의 응답 헤더에 대해 "Content-Type : text/html; charset = UTF-8"이라고 말합니다. – Markus

+0

오케이. 그 문자 인코딩 필터가 체인의 맨 처음 필터입니까? 다른 필터가'getParameter()'를 호출 한 경우 그것을 설정하기에는 너무 늦었을 것이다. 한편 디버깅하는 동안,'ExternalContext # getRequestCharacterEncoding()'은 빈의 액션 메소드에서 그것을 출력 할 때 무엇을 말합니까? – BalusC

+0

이것은 web.xml의 유일한 필터이지만 인증을 위해 Picketlink를 사용합니다. 이것은 아마도 요청에서 매개 변수를 읽습니다.그러나 ExternalContext # getRequestCharacterEncoding()은 필터가 활성 상태인지 여부에 관계없이 utf-8을 반환합니다. – Markus

답변

0

모든 것이 이제까지 멋지게 보입니다.

전에 문자 인코딩 필터가 요청 본문 문자 인코딩을 설정하기 전에 다른 사람이 요청 본문에 이미 액세스 한 (따라서 암시 적으로 구문 분석 한) 경우에만이 구문은 실패합니다. 그런 다음 요청 본문을 파싱하기위한 문자 인코딩을 설정하기에는 너무 늦었습니다.

의견에 따라 PicketLink가 여기에있는 것으로 보입니다. UTF-8을 사용하도록 알려야합니다. 그렇지 않은 경우 개발 팀에 버그/문제 보고서를보고하십시오. 이 모든 것이 적어도 JSF를 제어 할 수 없으므로 JSF 관련 문제가 아닙니다.

+0

예 Picketlink는 이전에 매개 변수를 읽었습니다. 기본 문제는 JBoss가 기본 인코딩을 하드 코드하고 필터 메커니즘이 인코딩을 설정하는 데 적합하지 않다는 것입니다. 참고로 필자는 [Picketlink 포럼] (https://community.jboss.org/thread/221662)에서 문제에 대해 질문했습니다. 해결 방법으로 필터와 비슷한 밸브를 구현할 수 있습니다. 빠른 도움에 감사드립니다. – Markus