2012-11-06 51 views
2

我有一个应用程序,我试图创建速度模板存储库,这将帮助我集中所有电子邮件模板,并允许我创建通信中心。所有模板将在运行时调用,并通过服务填充数据。从.vm文件读取Velocity标记/标记

我的问题是,我需要为用户提供可选的和必须的参数列表,当他们定义速度模板的模板输入。

有没有办法从速度模板文件中读取标记/标记并提取它们?

就像我想要的一个令牌$ name.address.streetName列表可以从我的.vm文件。

我不想去正则表达式。

我不必缓存或重用它们,它只是一次性读取并在数据库中存储默认的强制&可选参数。

我下面这些模式:http://kickjava.com/src/org/apache/velocity/test/view/TemplateNodeView.java.htm

How to use String as Velocity Template?

请指点。

回答

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。