再也不要用struts2.1.6了

来源:互联网 发布:软件设计师合格标准 编辑:程序博客网 时间:2024/04/27 19:40

struts2.1.6有一个逆天的中文乱码BUG存在。。对于设置struts.i18n.encoding"无法阻挡提交的参数出现中文乱码。这个BUG在2.1.8更正了。

方法一:升级struts2版本

方法二:听闻可以通过filter改变:

http://ywlqi.iteye.com/blog/323589

大体内容:

近期把项目从struts2.0 升级到struts2.1.6,在不加上encodingFilter的情况下,无论怎么设置struts.locale和struts.i18n.encoding,都会中文乱码,加上encodingFilter才没事,不知道这是为什么?希望大虾给予解答
我的web.xml配置


评论
4 楼 ywlqi 2009-06-24  
刚从JE上看到这是2.1.6的BUG,官方已经对此做了修复:https://issues.apache.org/struts/browse/WW-3075 


另一个博客上也提到:

struts2.1.6版本中存在一个Bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置 ,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你使用的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在Struts2的Filter之前,然后在doFilter()方法里添加以下代码

public void doFilter(...){
HttpServletRequest req = (HttpServletRequest) request;
req.setCharacterEncoding("UTF-8");//应根据你使用的编码替换UTF-8
filterchain.doFilter(request, response);
}

另一位大神的建议是 :


换个继承的类在源文件修改的那个是get的方式提交可以改变,用下面的这个是拦截post的提交方式,这是经常用到的,包你解决问题
public class MyFilter extends RequestProcessor {

@Override
protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {

 try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 


return true;
}
  



}

上面的参考可以到:http://bbs.csdn.net/topics/300114451


我的想法是:升级吧


原创粉丝点击