环境是Spring配合Struts2,页面提交表单,表单中文乱码,理应是比较简单的一个问题,但想不到解决的方式出乎意料。
其实无外乎以下几个问题
1:struts2如果使用了国际化,那么需要指定编码方式
1 <constant name="struts.locale" value="zh_CN" />
2 <constant name="struts.i18n.encoding" value="UTF-8"/>
2:设置好所使用的页面的内容类型(JSP)
1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
2 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
3:设置好request和response的setCharacterEncoding()方法,当然了,不推荐重复造轮子,让已有的轮子转起来就好,直接在项目中添加过滤器
1 <filter>
2 <filter-name>encodingFilter</filter-name>
3 <filter-class>
4 org.springframework.web.filter.CharacterEncodingFilter
5 </filter-class>
6 <init-param>
7 <param-name>encoding</param-name>
8 <param-value>UTF-8</param-value>
9 </init-param>
10 <init-param>
11 <param-name>forceEncoding</param-name>
12 <param-value>true</param-value>
13 </init-param>
14 </filter>
15 <filter-mapping>
16 <filter-name>encodingFilter</filter-name>
17 <url-pattern>/*</url-pattern>
18 </filter-mapping>
上述三种情况是我当时能想到的,检查之后我再次尝试,但是依然乱码,之后我幻想着将过滤器的顺序条换,将org.springframework.web.filter.CharacterEncodingFilter过滤器置前,
但是问题依然没有解决。最后多方求助,是如下解决的。
4:form标签记得显式的声明提交方式
提交乱码时的form标签并没有显式的声明method为post,需要添加。
1 <form action="/supply/saveAmbiguousCustomer_mgr.htm" id="sendreq" method="POST">