struts2.0升级到struts2.1.6遇到的问题汇总

struts2.0升级到struts2.1.6遇到的问题汇总

最近项目从struts2.0升级struts2.1,改动还真不少,这里把升级过程中遇到的问题都记录下来:

问题一 web.xml的变化
struts2.1中的写法为:

<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->      < filter >
        
< filter - name > struts2 </ filter - name >
        
< filter - class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </ filter - class >
    
</ filter >
    
< filter - mapping >
        
< filter - name > struts2 </ filter - name >
        
< url - pattern > /* </url-pattern>
    </fil
ter-mapping>

问题二 零配置的变化
在struts2.0中,一直使用的是codebehind插件,在struts2.1中已废弃codebehind,改用convention插件,这个插件使用比较简单,根据官方的文档很全,很容易就能上手,这里把我convention的参数写下来:

<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> struts.convention.result.path=/WEB-INF/jsp/
struts.convention.action.name.lowercase=false
struts.convention.action.name.separator=
struts.convention.default.parent.package=default
struts.convention.package.locators.basePackage=com.mysite.web.action


问题三 tabbedPanel标签
一 直在使用struts2.0中的s:tabbedPanel标签,这个标签使用的是dojo脚本框架,在struts2.0中是自带的,struts2开 发小组在struts2.1中把dojo做为插件的形式存在,对应的写法也发生了变化,下面是struts2.1中的写法:

<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> <% @ taglib prefix = " sx "  uri = " /struts-dojo-tags "   %>

……

< sx:head />
< sx:tabbedpanel id = " tabbedpanel1 "  cssStyle = " width: 100%; height: 100% "  doLayout = " true "   >
    
< sx:div id = " column1 "  label = " 栏目一 "  loadingText = " 加载中…… "
        href
= " url1.action "  cssStyle = " display:none " >
    
</ sx:div >
    
< sx:div id = " column2 "  label = " 栏目二 "  loadingText = " 加载中…… "
        href
= " url2.action "  cssStyle = " display:none " >
    
</ sx:div >
</ sx:tabbedpanel >


问题四 乱码问题
原来在struts2.0里面正常的内容,在struts2.1.6中会乱码,struts2.1.6居然还敢声称GA版,这种bug都有,汗一个,从官方找到的解决办法,
修改strut2.1.6源文件org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,把doFilter方法中由:

<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();
prepare.setEncodingAndLocale(request, response);

改为:

<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> prepare.setEncodingAndLocale(request, response);
prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();

不想修改源文件的话,把StrutsPrepareAndExecuteFilter类的代码copy一份,然后web.xml配置成你copy的这份也可以

问题五 could not be resolved as a collection/array/map/enumeration/iterator type
在s:select,s:s:checkboxlist标签中使用集合,如果集合为空时,会报这个错误,在struts2.0中不会报这个错误

问题六 float类型变量值为0.0时,设置set方法时出错
目前没有发现好的解决方法,替待解决方法是去掉set方法,提交页面需要设置值时,通过request.getAttribute方式获取

还有一些其他问题,还在整理中……

你可能感兴趣的:(apache,Web,jsp,struts,dojo)