获取 Velocity 中的变量

man*_*noy 3 java velocity

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