webwork的xwork.xml里面配置的轉發帶中文參數就是亂碼,這里的vcStatus是中文就亂。
<result name="success" type="redirect">
/haplayadmin/initManageThread.action?vcStatus=${vcStatus}
</result>
1.我們都知道tomcat的默認編碼是iso8859
2.webwor的默認編碼是iso8859,而webwork.i18n.encoding = utf-8這里配置的是希望轉換成的字符集
3.在轉換前的action中得到的參數,如果是以get方式得到的那么應該是iso8859(tomcat進行了從utf-8(這個是頁面中的contentType決定的)到iso8859的轉換)。
如果是post方式得到的則應該是utf-8(因為webwork把從tomcat得到的參數setCharactorEncoding為webwork.properties配置的字符集,通常我們設置的和頁面字符集一樣)。
4.這樣我們在以redirect的方式轉換到actionB的時候顯然是以get方式提交了,webwork會執行從iso8859到utf-8的轉換(webwork.properties里面的配置進行轉換)。這時就會出問題:假設前面是以get方式提交的,那么就會從iso8859到utf-8,記住這時我們得到了utf-8編碼的字符集.
5.接著,tomcat很老實的把參數按照頁面中contentType設定的值(這里是utf-8)轉換成iso8859字符集,由于是get方式提交則不會經過webwork的setCharactorEncoding,那么我們得到的是iso8859字符集。
6.在轉發后的action中就得到了iso8859編碼的字符集,我們只要把這個字符集進行從iso8859到utf-8的轉換即可得到需要的參數。
7.然而假設第三步假設是以post方式提交的,我們則得到的是utf-8的字符集編碼,在第四步webwork在執行從iso8859到utf-8的轉換中就把參數的原始字符集寫錯了,因為我們得到的是utf-8的原始字符集而不是iso8859。這時轉換編碼的參數永遠也轉不回來了。
注:實際上webwork在解析xml中的轉發表達式的時候進行的字符集轉換,在其他地方則不會出現這樣的問題。