我有一个插件项目,我正在使用 Velocity 模板。用户可以从首选项页面更改模板主体,并且我希望当用户在首选项页面中单击“确定”时获取模板主体中的变量。我需要帮助从 Velocity 模板主体中提取变量。
小智 5
Velocity 使用 JavaCC 解析模板并创建 AST。
RuntimeInstance 是解析模板所需的全部。
RuntimeInstance ri = new RuntimeInstance();
SimpleNode node = ri.parse( reader, "templateName" );
Run Code Online (Sandbox Code Playgroud)
现在您必须根据您的需要扩展 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;
}
};
Run Code Online (Sandbox Code Playgroud)
然后访问节点...
visitor.visit(node, null);
Run Code Online (Sandbox Code Playgroud)
如果您有如下模板:
some text $var other text
Run Code Online (Sandbox Code Playgroud)
建议的代码仅打印出来$var
。
请注意,ASTReference 是任何引用。如果您有如下模板:
some text $var other text
#set( $primate = "monkey" )
Run Code Online (Sandbox Code Playgroud)
此代码打印出:$var
和$primate
。
归档时间: |
|
查看次数: |
5505 次 |
最近记录: |