Uploaded image for project: 'Teeda'
  1. Teeda
  2. TEEDA-359

JSPのcharsetが無視される

XMLWordPrintable

    • Type: Icon: Task Task
    • Resolution: Fixed
    • Priority: Icon: Major Major
    • 1.0.11
    • 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
      が含まれてしまい、無限ループしてしまいました。

            Assignee:
            shot shot
            Reporter:
            shot shot
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: