以前在使用webwork2.2.6,今天换了struts2试试,版本struts2.1.6。根据官方包下给的例子配置action拦截器时总是对中文不能很好的支持。
官方web.xml配置如下
或者使用官方的另一配置
测试的其他环境编码: tomcat5.5 编码utf-8、测试页面编码
form表单:
使用以上配置在进行表单提交时总是对中文显示乱码,当将method="post"该为method="get"时该问题不存在。
google了下,说要设置struts.locale和struts.i18n.encoding,但设置后并未有任何效果。该设置在struts.xml和struts.properties中均做过测试,未通过。也有说要设置org.springframework.web.filter.CharacterEncodingFilter
(详见:http://ywlqi.javaeye.com/blog/323589 ),该方式未经测试。
想到在使用webwork中并未进行如此配置,但均不会出现问题。考虑到struts2和webwork的关系,遂将web.xml中的action拦击改为
同时不用设置struts.locale和struts.i18n.encoding,问题解决。
另,如系统使用的是GBK或是其他编码,除了在页面、服务器(tomcat)中设置相应的编码外,还要在struts.xml中增加<constant name="struts.i18n.encoding " value="系统编码" />或是在struts.properties中添加struts.i18n.encoding = 系统编码。如果没搞错的话struts2.1.6默认是对utf-8支持的。
至于是什么问题引起该中问题,目前尚不清楚。待后续继续查找了。(ps:应该是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter的问题 )
注:在运行struts2.1.6的struts2-showcase-2.1.6例子中personManamger中,创建一个中文用户时系统出现乱码,是否可以推断官方在struts2.1.6包携带的例子中并未解决中文编码问题。