我有一个插件项目,我正在使用Velocity模板。用户可以从首选项页面更改模板正文,并且当用户在首选项页面中单击“确定”时,我想要获取模板正文中的变量。我需要帮助从Velocity模板体中提取变量。获取Velocity中的变量
2
A
回答
0
我能想到的唯一的办法是添加像这样的速度发动机:
VelocityContext context = new VelocityContext();
context.put("parameters", new HashMap());
...在模板中,让用户放值到参数的HashMap像这样:
#set ($t = $parameters.put("value", "key"))
(重要:用户必须为其赋值给一个临时的参数,例如:$ T)
...然后,在渲染之后,取出来的值:
HashMap map = (HashMap)context.get("parameters");
for (String key : map.keySet()) {
// ...
}
3
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
。
0
xdocreport项目做了这项工作。
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>xdocreport</artifactId>
<version>1.0.6</version>
</dependency>
StringReader templateReader = new StringReader(stringyTemplateContent);
FieldsExtractor<FieldExtractor> extractor = FieldsExtractor.create();
VelocityFieldsExtractor.getInstance().extractFields(templateReader, templateName, extractor);
for (FieldExtractor fieldExtractor : extractor.getFields()) {
System.out.println(fieldExtractor.getName());
}
我以他们的VelocityFieldsExtractorTestCase
为例。
相关问题
- 1. 获取变量中的'true'
- 2. C++从变量中获取变量
- 3. 获取的变量
- 4. 获取的变量
- 5. 获取变量
- 6. 获取变量
- 7. 获取变量
- 8. C#/ Java/Velocity获取数组的内容
- 9. Velocity模板追加变量URL
- 10. Cmd的 - 获取变量的变量名
- 11. 获取splat ruby中变量的数量
- 12. 在php中获取变量
- 13. 在iframe中获取变量
- 14. 从类中获取变量
- 15. 通过strlen获取变量的变量
- 16. Velocity在获取模板时抛出NPE
- 17. 获取javascript变量
- 18. PHP获取变量
- 19. HTTP获取变量
- 20. 获取__init__变量
- 21. 获取;组;变量
- 22. 获取变量包
- 23. 从Java中的变量中获取类
- 24. 从第二个活动中获取主变量中的变量
- 25. 获取变量的值
- 26. 获取表的变量名
- 27. Scrapy - 获取JavaScript的变量
- 28. 获取变量的值
- 29. 获取变量的名称
- 30. 获取JavaScript变量的值