Struts 7.0自定义Anchor组件FreeMarker模板attributes为空解决方案咨询
解决Struts 7.0.0自定义Anchor类FreeMarker模板attributes为空的配置方案
1. 修正自定义Anchor类的属性访问逻辑
Struts 7.0.0调整了OGNL表达式的访问规则,需确保自定义Anchor类的attributes属性能被模板正常读取:
- 显式重写父类的
getAttributes()方法,即使父类已有该方法,也通过重写强化兼容性:
@Override public Map<String, Object> getAttributes() { return super.getAttributes(); }
2. 配置Struts标签组件映射
在struts.xml中注册自定义Anchor类,覆盖原生anchor标签的实现:
<struts> <constant name="struts.ui.templateDir" value="template" /> <constant name="struts.ui.theme" value="simple" /> <bean type="org.apache.struts2.components.Anchor" name="anchor" class="你的自定义类全限定名" scope="default" /> </struts>
替换上述代码中的你的自定义类全限定名为实际的类路径。
3. 手动注入attributes到模板上下文
若模板仍无法识别attributes变量,在自定义类的start方法中强制将其放入ValueStack:
@Override public boolean start(Writer writer) { boolean result = super.start(writer); getStack().setValue("attributes", getAttributes()); return result; }
4. 统一Struts依赖版本
执行gradle update_libs后,检查项目lib目录:
- 删除所有Struts 6.3.0版本的jar包,确保所有Struts核心、标签库等依赖均为7.0.0版本,避免类加载冲突。
5. 调整Eclipse项目部署配置
- 右键项目 → Properties → Deployment Assembly,确认lib目录下的所有Struts 7.0.0 jar包已被添加到部署路径,会同步到Tomcat的WEB-INF/lib目录。
- 进入Java Build Path,将Struts 7.0.0的jar包优先级调整至最高,避免旧版本类被优先加载。
内容的提问来源于stack exchange,提问作者Yasuoz
相关产品推荐
相关产品推荐

