java - 获取 Velocity 中的变量

标签 java velocity

我有一个插件项目,我正在使用 Velocity 模板。用户可以从首选项页面更改模板主体,我想在用户单击首选项页面中的“确定”时获取模板主体中的变量。我需要帮助从 Velocity 模板主体中提取变量。

最佳答案

Velocity 使用 JavaCC 解析模板并创建 AST。

RuntimeInstance 是解析模板所需的一切。

RuntimeInstance ri = new RuntimeInstance();
SimpleNode node = ri.parse( reader, "templateName" );

现在您必须根据需要扩展 BaseVisitor。 BaseVisitor 是所有访问者的抽象类。 BaseVisitor 有一种节点类型方法,因此您可以轻松过滤 AST 节点。

ParserVisitor visitor = new BaseVisitor() {
@Override
public Object visit(final ASTReference node, final Object data) {
    //insert here your logic ...
    System.out.println(node.getFirstToken();
    //use super.visit( node, data) if you need to traverse all node children 
    return null;
    }
};

然后访问节点...

visitor.visit(node, null);

如果您有如下模板:

some text $var other text

建议的代码只打印出$var

请注意,ASTReference 是任何引用。如果您有如下模板:

some text $var other text
#set( $primate = "monkey" )

此代码打印出:$var$primate

关于java - 获取 Velocity 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051437/

相关文章:

java - 当我使用 layout.vm 时如何以速度包含额外的静态文件(css,js)?

java - 如何分析当前在 SonarQube 中分析的其他类的代码?

java - 运行 Apache Velocity 模板时获取调试消息

java - 是否可以使用 java 变量将 HTML 直接插入到速度模板中?

exception - 当未找到布局时,如何捕获 Liferay Velocity 主题中的 NoSuchLayoutException?

javascript - 如何使用 Velocity 制作多级 Liferay 菜单?

java - 在java中将输出打印到.txt文件的问题

java - 如何使子弹向 3 维空间中的一个点移动

java - 使用 @OneToMany 或 @ManyToMany 来针对发生的未映射类异常

java - 在运行时编译 java 文件可以在 eclipse 上工作,但不能从导出的可运行 jar 文件中工作