当尝试使用java源代码作为Velocity的模板时,它在模板的这一行崩溃:
/* @see panama.form.Validator#validate(java.lang.Object) */
有这个异常(exception):
Exception in thread "main" org.apache.velocity.exception.ParseErrorException: Lexical error, Encountered: "l" (108), after : "." at *unset*[line 23, column 53]
at org.apache.velocity.runtime.RuntimeInstance.evaluate(RuntimeInstance.java:1301)
at org.apache.velocity.runtime.RuntimeInstance.evaluate(RuntimeInstance.java:1265)
at org.apache.velocity.app.VelocityEngine.evaluate(VelocityEngine.java:199)
显然,它需要宏的#validate
,并在尝试解析宏的参数时崩溃。有什么办法可以解决这个问题吗?
我使用的是 Velocity 1.7。
编辑
我知道我可以转义模板文件中的 #
字符,但是其中有很多字符也可能会不时更改,所以我更喜欢一种不需要手动的方法文件的更改。
最佳答案
第一个选项 从这里尝试这个解决方案:Escaping VTL Directives
VTL 指令可以使用反斜杠字符(“\”)进行转义,其方式类似于有效的 VTL 引用。
## #include( "a.txt" ) renders as <contents of a.txt>
#include( "a.txt" )
## \#include( "a.txt" ) renders as #include( "a.txt" )
\#include( "a.txt" )
## \\#include ( "a.txt" ) renders as \<contents of a.txt>
\\#include ( "a.txt" )
第二个选项
您有这个工具[EscapeTool][2]
。
用于在 Velocity 模板中进行转义的工具。
它提供了转义 Java、JavaScript、HTML、XML 和 SQL 输出的方法。 还提供了渲染需要转义的 VTL 字符的方法。
第三个选项: 您也可以尝试此解决方法,我没有使用它,但它应该可以工作:
您可以一开始将模板作为字符串
读取,然后预解析它。例如,将所有 #
替换为 \#
,或添加到文件开头
#set( $H = '#' )
$H$H
查看这个答案:How to escape a # in velocity然后从预解析 String
使用以下答案创建模板:How to use String as Velocity Template?
关于java - Velocity解析器在解析java代码模板时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773809/