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中的转发表达式的时候进行的字符集转换,在其他地方则不会出现这样的问题。