Apache Velocity变量名后点字符的转义问题求助
Apache Velocity变量后点字符的正确转义方法
你的问题根源在于:Velocity会把$class_name.MIN_VALUE中的.MIN_VALUE解析为class_name变量的属性,但你传入的class_name是字符串类型,不存在MIN_VALUE属性,因此模板会原样输出。
以下是两种可行的解决方法:
方法一:用${}明确变量边界(推荐,兼容所有版本)
直接将模板中的$class_name改为${class_name},以此明确变量的范围,避免Velocity把后面的点当成属性访问符:
## function.vm void functionA() { int minimum_value = ${class_name}.MIN_VALUE; int maximum_value = ${class_name}.MAX_VALUE; }
替换后输出结果:
void functionA() { int minimum_value = Short.MIN_VALUE; int maximum_value = Short.MAX_VALUE; }
方法二:针对Velocity 2.x使用反斜杠转义
如果你使用的是Velocity 2.x版本,可以直接用反斜杠转义点字符,且转义后的反斜杠不会被输出:
## function.vm void functionA() { int minimum_value = $class_name\.MIN_VALUE; int maximum_value = $class_name\.MAX_VALUE; }
但这种方法在Velocity 1.x中会保留反斜杠,因此兼容性不如第一种方法。
另外你提到的$esc.java()工具,作用是转义Java特殊字符(如引号、换行符等),并不适用于解决变量边界的解析问题,所以无效是正常的。
内容的提问来源于stack exchange,提问作者hakuna matata
相关产品推荐
相关产品推荐

