2012-05-09 17 views
0

Spring MVC 3.1.1でビルドされたTomcat Webアプリケーションでエンコードの問題を悩まされています。 Freemarkerのスプリングマクロを介してばねによって結合Spring MVC freemarkerデータバインド文字エンコードを無効にする

通報

フォーム入力フィールドの値は、ISO-8859-1の代わりにUTF-8としてデコードされます。

現在の設定

私は、UTF-8のすべてをエンコードするFreeMarkerのを設定しています。

<bean id="freemarkerConfig" 
     class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
     <property name="templateLoaderPath" value="/WEB-INF/templates/" /> 
     <property name="freemarkerSettings"> 
      <props> 
      <prop key="auto_import">spring.ftl as spring</prop> 
      <prop key="url_escaping_charset">UTF-8</prop> 
      </props> 
     </property> 
    </bean> 

ここに、web.xmlファイルの文字エンコードフィルタの設定を示します。

<filter> 
    <filter-name>characterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

HTMLマークアップヘッドタグが含まれています

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

UTF-8エンコーディングのような値を形成するためにバインドされたデータを除いて、私のFreeMarkerのビューに戻ってくるデータを表示するための素晴らしい作品以下の入力。

私の知る限り
<form id="main-search-form" action="search" method="GET"> 
    <@spring.formInput 'searchForm.q' 'id="q" maxlength="2048" autocomplete="off" spellcheck="false"'/> 
</form> 

、およびインターネット上で読書の時間を実行した後、それはほとんどの場合、ISO-8859-1に春のデフォルトのように思えるが、私は変化に上書きするBeanを発見していませんバインドされたデータのデコードのタイプHTTPリクエストがUTF-8でエンコードされ、TomcatコンテナのConnectorノードがURIEncode = "UTF-8"に設定されている場合でも、SpringはISO-8859-1でデコードしようとします。

ご協力いただければ幸いです。

答えて

1

私の頭を机の上で何時間も叩いた後、私は最後に問題の原因を突き止めたと思います。上記の私の設定はすべて正しいです(Tomcatコネクタプロパティ、URIEncode = "UTF-8"を含む)。

私は、フォームの送信を介して自分のGET要求のエンコーディングを処理していたのがSpring MVCであると仮定して間違いました。

しかし、実際にはフォームマークアップの問題でした。私はその形式をUTF-8としてcharsetに指定する必要がありました。

<form id="main-search-form" action="search" method="GET" accept-charset="UTF-8"> 
    ... 
</form> 

これは、上記の構成と組み合わせて、私の問題を解決しました。

1

私は正しくバックエンドに提出私のUTF-8文字を取得するために

<form ... accept-charset="UTF-8"> ... 

を指定する必要がありました。

関連する問題