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