我有一个插件项目,我正在使用 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/