Tiles2迁移至Tiles3时如何配置tiles定义中put-list-attribute的bean列表
Tiles3 迁移后 put-list-attribute 内bean配置失效解决指南
失效根本原因
Tiles3 对配置解析模块做了完全重构,不再原生识别Tiles2版本内put-list-attribute节点下的bean标签语法,原有写法没有对应的解析规则映射,配置的Tab对象列表无法被正常实例化注入,最终导致功能失效。
可落地适配方案
- 方案1:最小改动适配Tiles3原生语法
仅需将原有配置中的bean标签替换为Tiles3默认支持的item标签,其他属性、配置结构完全保留即可正常运行,修改示例如下:
注意两个适配细节:<definition name=".tabs.resource.list" extends=".tabs.resource"> <put-attribute name="selectedIndex" value="0" /> <put-attribute name="resourceType" value="1" /> <put-list-attribute name="tabList"> <item classtype="org.test.sample.ui.util.Tab"> <set-property property="value" value="Tab1" /> <set-property property="link" value="currentHealthTab1listVisibility.action" /> <set-property property="mode" value="currentHealth" /> <set-property property="height" value="21" type="java.lang.Integer" /> <set-property property="width" value="102" type="java.lang.Integer" /> </item> <item classtype="org.test.sample.ui.util.Tab"> <set-property property="value" value="Tab2" /> <set-property property="link" value="viewlistTab2listVisibility.action" /> <set-property property="mode" value="view" /> <set-property property="height" value="21" type="java.lang.Integer" /> <set-property property="width" value="102" type="java.lang.Integer" /> </item> </put-list-attribute> </definition>- classtype、set-property的属性写法和Tiles2完全兼容,不需要额外调整
- 针对int/long等非字符串类型的属性值,需要显式追加
type类型声明,避免配置解析时出现字符串到数值类型的转换报错
- 方案2:自定义解析器兼容老配置
如果项目存量xml中有大量Tiles2时代的bean节点配置,逐行改造成本过高,可以自定义扩展Tiles的节点解析规则,将bean标签的解析逻辑和Tiles3内置的item标签解析逻辑做绑定,让解析器遇到原有的bean节点时直接走对象实例化、属性自动注入的流程,全程不需要修改任何业务侧的xml配置。 - 方案3:动态数据剥离
将原本写在xml配置里的tabList列表从静态配置中剥离,放到对应业务的Controller层模型数据中返回给前端,xml仅保留非动态的通用属性配置,这种方式适合tab配置会随业务变化的场景,长期维护成本更低。
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

