论坛首页 Java企业应用论坛

弃成见,反省,并重新认识struts.i18n.encoding

浏览 17140 次
该帖已经被评为精华帖
作者 正文
   发表时间:2008-12-31  
这才是IT届真正的态度。
0 请登录后投票
   发表时间:2009-01-21  
我相信楼主写那篇文章,是站在纯技术的角度来讨论问题,但是后面跟贴的好多人进行人身攻击就有欠妥当了。看到楼主后面的声明和今天的这篇文章,我真的感到受益良多。楼主让我们感受到的不仅是你的渊博的知识,还有你对待知识的态度。
0 请登录后投票
   发表时间:2009-03-04  
虚心的态度是学习的最好动力,lz真是难得。
0 请登录后投票
   发表时间:2009-03-11   最后修改:2009-03-11
如果用StrutsPrepareAndExecuteFilter,struts.i18n.encoding就不一定起作用了。

StrutsPrepareAndExecuteFilter中:
     //这一步已经取出了reuqest的所有parameter
     prepare.createActionContext(request, response);

     prepare.assignDispatcherToThread();

     //虽然设置了request的encoding,但由于parameter已取出,action中request.getParameter()返回的是设置encoding之前的parameter的值
     prepare.setEncodingAndLocale(request, response);


如:
struts.i18n.encoding设置为UTF-8,jsp页面用UTF-8,jsp的form中提交一个中文如username,在action中看request.getParameter("username"),一样是乱码。

因此StrutsPrepareAndExecuteFilter前还是得加个CharacterEncodingFilter的,struts.i18n.encoding对request不起作用,虽然设置了。
0 请登录后投票
   发表时间:2009-03-15   最后修改:2009-03-15
SunOne 写道
如果用StrutsPrepareAndExecuteFilter,struts.i18n.encoding就不一定起作用了。

StrutsPrepareAndExecuteFilter中:
     //这一步已经取出了reuqest的所有parameter
     prepare.createActionContext(request, response);

     prepare.assignDispatcherToThread();

     //虽然设置了request的encoding,但由于parameter已取出,action中request.getParameter()返回的是设置encoding之前的parameter的值
     prepare.setEncodingAndLocale(request, response);


如:
struts.i18n.encoding设置为UTF-8,jsp页面用UTF-8,jsp的form中提交一个中文如username,在action中看request.getParameter("username"),一样是乱码。

因此StrutsPrepareAndExecuteFilter前还是得加个CharacterEncodingFilter的,struts.i18n.encoding对request不起作用,虽然设置了。


设置后同样乱码的问题:
  String value = request.getParameter("name");
System.out.println(request.getCharacterEncoding() + " \t " + value);
byte nameb[] = value.getBytes("iso8859_1");
String encode = new String(nameb,"utf-8");
                System.out.println(encode);
用上面的方法, 第二行打印的是:utf-8  乱码
               第五行打印的是正确的汉字。

可能是和上面引用的内容类似的问题。不过并没有使用StrutsPrepareAndExecuteFilter。
唯一特别的地方就是使用了sitemesh.并用Spring管理Action类。

有哪位朋友有类似的问题?有没有优雅的解决方案。
0 请登录后投票
   发表时间:2009-03-19  
web.xml中配置在struts2的filter之前,这是为什么?我把filter放在struts2后面发现还是乱码,放在前面确是正确的!是因为放在前面首先才能把response.encoding设置为utf8?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics