我有一个应用程序,我在尝试创建一个速度模板存储库,它将帮助我集中所有的电子邮件模板,并允许我创建一个通信中心。所有模板都将在运行时调用,并通过服务填充数据。
我的问题是,我需要在为用户定义速度模板的模板输入时为其提供可选和强制参数列表。
有没有办法从速度模板文件读取标记/标记并提取它们?
就像我想要一个令牌列表$ name.address.streetName可以从.vm文件中获取。
我不想去Regex。
我不必缓存或重复使用它,它只是一次性读取并存储默认值,强制性和&数据库中的可选参数。
我遵循以下模式:http://kickjava.com/src/org/apache/velocity/test/view/TemplateNodeView.java.htm
How to use String as Velocity Template?
请建议。
答案 0 :(得分:1)
我让它像这样工作
RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices();
StringReader reader = new StringReader(String velocityTemplateBodu);
SimpleNode node = runtimeServices.parse(reader, "dummyOne.vm");
for(int i=0; i<node.jjtGetNumChildren();i++){
if(node.jjtGetChild(i) instanceof org.apache.velocity.runtime.parser.node.ASTReference ){
System.out.println("Node -----------------"+i +"---"+node.jjtGetChild(i).literal());
}
}
使用SimpleNode类可以获得.vm文件中的所有节点。
使用javaCC作为ASTReference和ASTText(都扩展SimpleNode)读取节点。要获取令牌,您需要获取ASTReference并获取HTML文本使用ASTText。