struts2.08升级struts2.18过程纪要
因为一些必须的原因,需要将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这块不熟,有对这块有经验的请赐教。如果解决,我会将方案记录下来。
最后抱怨几句,发现struts升级没考虑到向下兼容啊。升级太痛苦了。
还有就是struts2.08有时候会有请求阻塞的情况,不知道大家遇到过没有?就是请求提交到后台之后进不了action,此情况不稳定复现。