2012-05-09 35 views
0

我一直在摸索着用Spring MVC 3.1.1构建的Tomcat web应用程序的编码问题。覆盖Spring MVC freemarker数据绑定字符编码

的问题

经由Freemarker的弹簧宏由弹簧结合形式输入字段值被解码为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> 

据我所知,和做阅读在互联网上小时后,好像春天默认为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。

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

这与上述配置相结合,解决了我的问题。

1

我需要指定

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

让我的UTF-8正确提交到后端的字符。