我们目前正在使用Struts2.0,并计划将其升级到2.5.X。是否有任何迁移过程可以帮助我直接升级到2.5.X?是因为V2.0的版本很旧,并且在以后的版本中实现了许多新功能。
有人建议不要直接迁移到2.5.X,因为发生了很多更改。但是,首先将其升级到2.3.X,然后再升级到2.5.X。
我已经更新了我对上述问题的回答中的链接。但是,没有直接链接到迁移指南。如果可以帮助您进行迁移,则可以使用this链接。
Struts 2.3到2.5的迁移
StrutsPrepareAndExecuteFilterDTDHTML 5标签属性Div标签栏位名称瓷砖ApplicationServer / ServletContainer的Temp / Work目录新的区域设置感知转换逻辑依赖将Struts依赖项更新为2.5。
删除以下插件依赖项,因为它们已被删除并且不再受支持。
Dojo插件代码隐藏插件JSF插件Struts1插件请注意,该框架现在将Log4j2用作主要的日志记录层,不建议使用现有的旧日志记录层,并将很快将其删除。 Log4j2支持许多不同的日志记录实现,请查看文档以获取更多详细信息。
StrutsPrepareAndExecuteFilterorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter已移至org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter。
在web.xml中替换为:
Struts2的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter带有:
Struts2的org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter软件包还有其他更改,请阅读版本说明2.5了解更多详细信息。
DTDStruts DTD已更新至2.5版本。
在struts.xml中替换2.3 DTD版本:
2.5:
HTML 5现在,所有核心主题都符合HTML 5规范,这意味着在标签中使用必需的属性将产生正确的浏览器验证。
标签属性在以下标记中,id属性已替换为var属性。
如果您的代码中有类似内容:
更改为:
标记名属性被var属性替换。
来自:
到:
另外,escape属性也重命名为escapeHtml属性。
来自:
到:
Div标签标签已删除。
替换为纯HTML标记。
字段名称如果您具有以单个小写字母开头的字段名称,例如:
private String sTrng;公共字符串getSTrng(){...}公共无效setSTrng(String str){...}
将accessors更改为getsTrng和setsTrng。
或者更好的是,将字段名称更改为不包含单个小写字母:
private String strng;公共字符串getStrng(){...}公共无效setStrng(String str){...}
有关其他信息,请参阅WW-3909。
瓷砖根据升级的Strut版本以及是否使用Tiles-plugin或Tiles3-plugin,您可能需要执行不同的步骤。
Struts 2.5仅提供使用Tiles3的tile-plugin。因此,已删除了对Tiles2的支持以及名称tile3-plugin的支持。
现在唯一的Maven依赖看起来像这样:
对瓦片插件的依赖org.apache.strutsStruts2的瓷砖,插件$ {} struts2.version
您可能需要将tile.xml文件中的DTD更新为Tiles3:
tiles3 dtd
需要web.xml中的侦听器。无需在此处配置tile.xml文件的路径,因为它们是自动拾取的。
web.xml中的StrutsTilesListenerorg.apache.struts2.tiles.StrutsTilesListener
[可选,您可以从XML中删除TilesDefinitions并注释操作。有关更多详细信息,请参见Tiles插件。
ApplicationServer / ServletContainer的Temp / Work目录用户报告说,他们有必要删除ApplicationServer / ServletContainer的temp / work目录。可能会强制服务器重新编译JSP。
了解新语言环境的转换逻辑从Struts 2.5.12开始,引入了新的转换逻辑,当使用不常见的解决方案时,该转换逻辑会影响您的应用程序。其中之一是在Freemarker模板中使用数字文字。在这种情况下,Freemarker将它们视为数字(如BigDecimals),并且Struts逻辑将其转换为带有十进制零的字符串,请参见以下示例:
此代码段将产生以下HTML控件:
要解决此问题,您必须在值周围添加引号:
这是由于Freemarker如何处理数字文字。