You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts升级至6.3.0.2后actionError.jsp行61报错求助

Struts 2.5.33升级到6.3.0.2报错原因及修复方案

报错原因

第61行的</c:otherwise>本身语法无问题,报错是因为它包裹的<t:actionmessage>标签调用了自定义Freemarker模板actionmessage.ftl,该模板存在语法冲突:
Struts 6.x默认升级了Freemarker版本,且在HTML输出格式下强制开启自动转义,而模板第3行使用了旧版的?html手动转义语法,这会触发双重转义风险,Freemarker为避免此类错误直接抛出语法异常,最终Jasper处理JSP时将报错定位到模板调用代码块的结尾(即第61行)。

触发报错的模板代码:

class="${parameters.cssClass?html}"<#rt/>

修复方案

无需修改第61行的JSP代码,核心是修复引用的Freemarker模板,可选以下方式:

  • 方案一:移除旧版转义标记(推荐)
    删除模板中的?html后缀,自动转义已会对HTML输出做转义处理,修改后代码:
    class="${parameters.cssClass}"<#rt/>
    
  • 方案二:关闭模板自动转义(不推荐,需手动维护转义)
    在actionmessage.ftl开头添加配置,关闭当前模板的自动转义:
    <#ftl output_format="HTML" auto_escaping="off">
    
    此方式需确保所有需转义变量都手动添加?html,否则存在XSS风险。
  • 方案三:适配新转义语法
    用Freemarker新转义语法替代?html,示例:
    class="${parameters.cssClass?escape('HTML')}"<#rt/>
    
    注意:此方式与自动转义同时启用仍可能引发重复转义,优先选择方案一。

内容的提问来源于stack exchange,提问作者priya Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:38:23