2012-05-09 3 views
0

Я почесал голову над проблемой кодирования веб-приложением Tomcat, созданным с помощью Spring MVC 3.1.1.Замена символа символа символа freelarker Spring MVC

Проблема

значение формы поля ввода связаны пружиной с помощью Freemarker Spring макро получает декодируется как ISO-8859-1 вместо UTF-8.

Текущая конфигурация

Я настроил FreeMarker кодировать все в UTF-8.

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

Насколько я могу судить, и после выполнения часов чтения в Интернете, похоже, Spring по умолчанию в ISO-8859-1, в большинстве случаев, но я не нашел ни гроша, чтобы переопределить изменения тип декодирования для связанных данных. Даже когда HTTP-запрос закодирован в UTF-8, а узел Connector контейнера tomcat установлен с URIEncode = «UTF-8», Spring пытается декодировать с помощью ISO-8859-1.

Любая помощь будет оценена по достоинству.

ответ

1

После того, как я часами стучал головой о стол, я, наконец, понял, в чем проблема. Мои конфигурации выше были правильными (включая свойство соединителя Tomcat, URIEncode = "UTF-8").

Я допустил ошибку, предположив, что именно Spring MVC обрабатывал кодирование моих запросов GET через форму submit.

Однако это была действительно проблема с разметкой формы. Мне нужно было указать, что форма кодировки как UTF-8.

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

Это, в сочетании с вышеуказанными конфигурациями, разрешило мою проблему.

1

мне нужно указать

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

, чтобы получить мой UTF-8 символов, представленных на задний конец правильно.