環境是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">