java - Velocity解析器在解析java代码模板时崩溃

标签 java velocity

当尝试使用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/

相关文章:

javascript - 如何在我自己的自定义字段中使用 JIRA AUI 函数 - velocity edit.vm

android - 在 ECEF 中读取 GPS 坐标和速度

java - 像在 jQuery ajax 中一样使用 Retrofit 发出 POST Json 请求

java - 从边缘删除值

templates - 在velocity模板中调用java方法

java - 具有模板引擎速度的延迟加载

java - 用于停止和反转对象的按钮监听器 (GUI)

java - setDefaultLookAndFeelDecorated 影响 JFrame 调整大小行为

java - DAO 管理交易的设计是否糟糕?

java - 操作 VelocityView 来更改模板名称