Apache Velocity模板使用#noescape指令出现解析错误如何解决
错误原因
你遇到的解析错误是两个原因导致的:
#noescape是VelocityTools提供的扩展指令,不属于Velocity核心原生指令,默认不会加载- 你的语法使用错误,
#noescape指令后不需要加空括号(),多余的括号导致Velocity解析器无法正确匹配#end结束标记
解决方案
方案1:修正指令语法(优先尝试)
删除#noescape后的空括号即可,正确写法如下:
{ tree: #noescape $!{__NavTree__} #end }
方案2:检查配置确保指令已注册
如果修正语法后依然报错,需要在Velocity的配置文件中添加NoEscapeDirective的注册配置:
# 注册noescape指令,多个指令用英文逗号分隔 userdirective=org.apache.velocity.tools.generic.EscapeTool$NoEscapeDirective
方案3:使用方法调用替代指令写法(更稳定无解析冲突)
如果不想额外配置指令,可以直接调用EscapeTool的noescape方法,不需要#end标记,兼容性更好:
{ tree: $esc.noescape($!{__NavTree__}) }
注:使用该写法需要提前将org.apache.velocity.tools.generic.EscapeTool实例放入Velocity上下文,键名设置为esc
内容的提问来源于stack exchange,提问作者Evan zhong
相关产品推荐
相关产品推荐

