我有一個插件項目,我正在使用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變量的值