-
Type: Task
-
Resolution: Fixed
-
Priority: Major
-
Affects Version/s: None
-
Component/s: None
-
None
JSPでTeeda-ajax-1.0.7、Teeda-core-1.0.7を使い開発しています。
JSPのPageディレクティブに
<@ page language="java" contentType="text/html; charset=Windows-31J" %>
と指定していますが、
Ajax通信後に表示されるページの
レスポンスデータを見ると、
UTF-8となっています。
(以降もUTF-8のまま)
Ajax通信後には、contentTypeのcharsetに従い、
Windows-31Jとなってほしいのですが。
(追記)
表題の件、原因が判明しましたのでご報告と、
再度質問があります。ご回答をよろしくお願いいたします。
1.レスポンスがUTF-8となった原因
JSPでは@pageでWindows-31Jを明示的に指定しているが
viewタグの処理の中でresponse.setContentTypeしているため
JSPの指定が無視されている。
2.viewタグの処理でUTF-8がsetContentTypeされた原因
viewTagでは、リクエストからgetCharacterEncodingを
取得し、setContentTypeで設定している。
3.リクエストのCharacterEncodingがUTF-8となった原因
フィルターの処理でCharacterEncodingを"Windows-31J"と
設定しているが、ServletExternalContextUtil.setCharacterEncoding(ServletRequest)
でUTF-8に上書きされている
4.ServletExternalContextUtilでUTF-8が設定された原因
ServletExternalContextUtil.setCharacterEncodingでは下記のように動作している
getEncodingFromContentType ==> null
getEncodingFromSession ==> UTF-8
5.getEncodingFromSession がUTF-8となった原因
直前のajaxのリクエストが
FacesServlet -> AjaxServlet(フォワード)
で処理されていてFacesServletの
ViewHandlerImpl.storeResponseCharacterEncoding(ExternalContext)
のなかでUTF-8が設定されている
6.ajaxのリクエストがFacesServletで処理される原因
teedaのJSPの中でajax(teeda-ajax)を利用しており、ajaxのリクエストURL中に
facesが含まれるため、web.xmlの
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
にマッチしたため。
■質問内容
上記の現象をなんと回避したいのですがよい方法はないでしょうか。
6のurl-patternでajaxを除外できればと考えましたが、記述の仕方が
判りませんでした。
ちなみにurl-patternを*.jspとすると、HttpServletRequest.getPathInfoの結果にfaces
が含まれてしまい、無限ループしてしまいました。