论坛首页 Java企业应用论坛

struts2.08升级struts2.18过程纪要

浏览 4402 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-14   最后修改:2010-10-14
因为一些必须的原因,需要将struts从2.0.8升级到2.1.8,悲剧由此发生。
这里记录了一些升级过程中问题的解决思路,还有些则是待解决的问题。希望有经验的同学建议建议。
1 redirect写法不被支持。
解决:去掉下划线变驼峰之后问题成功解决
2 出现html的unicode码问题。struts2.1.8默认使用property标签时会使用unicode进行输出,据说是为了安全,国际化等,但是我等小项目,不需要与这些大概念沾边的,能用就行三,而这次的升级,确实是一个痛苦的过程。
注:对于普通的页面,浏览器会将其转换成对应汉字,但是如果是使用ajax,则不会进行转换(当然也可以手动转换,但是修改地方特别多)
解决:网上传闻在标签中加上escape属性即可。但是我大致看了一下,使用标签的地方很多(是很多),要找出ajax的用法也不是容易的事情。
于是开始寻找批量解决的方式,找到struts的tld文件,再对应找到源码中的PropertyTag类,发现其默认设置为true,将其改成false后问题解决。

3 纠结的来了,至今未能找到好的解决方法
起因:
项目需要国际化支持,并且action中存放的actionMessage是动态的,写法如下:
List<String> a ...
if (条件1){
    a.add("login.error");
} else if(条件2){
    a.add('login.locked');
}...
setActionMessage(a);

在界面中以前的写法大致如下:
<div id = 'msg'><s:property value="getText('${actionMessage}')" /></div>
消息通过EL表达式提取出来,然后放入标签中执行,得到配置文件中的值。

但是因为安全的考虑,2.1之后的版本取消了这样的用法,再这样写的话会报错的。
初步跟踪了一下代码,发现最后跑到xwork里去了,而我确实对struts这块不熟,有对这块有经验的请赐教。如果解决,我会将方案记录下来。
最新的解决方案:没办法之下自己写了国际化标签,可以使用EL表达式,问题解决!
最后抱怨几句,发现struts升级没考虑到向下兼容啊。升级太痛苦了。
还有就是struts2.08有时候会有请求阻塞的情况,不知道大家遇到过没有?就是请求提交到后台之后进不了action,此情况不稳定复现。
   发表时间:2010-10-14  
进不了action的情况我也遇见过,估计是不是为了偷懒都直接使用execute方法呢,推荐自己另外写一个方法,这样肯定能进入action
0 请登录后投票
   发表时间:2010-10-14  
不是,是线程阻塞了。方法都是重写过的。
0 请登录后投票
   发表时间:2010-10-14  
好像是只有2.0.8回有这个问题,反正我升级之后就可以了哈。
0 请登录后投票
   发表时间:2010-10-15   最后修改:2010-10-15
如果当初用freemarker做展示层,就不会这么痛苦了,稍微改一下就OK
struts2用到现在我还不会一个标签
0 请登录后投票
   发表时间:2010-10-15  
现在可是2.2.1版本了
0 请登录后投票
   发表时间:2010-10-15  
升级的版本不支持EL了,需要用ognl表达式写
http://www.iteye.com/topic/710405#1575005
0 请登录后投票
   发表时间:2010-10-16  
请求阻塞会不会是服务器的问题?服务器会不会把当前请求阻塞直接就不交给程序去处理,等到其他请求结束再把请求交给程序处理?
0 请登录后投票
   发表时间:2010-10-17  
现在用JSF2.0感觉比STRUTS靠谱!
0 请登录后投票
论坛首页 Java企业应用版

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