2012-11-06 65 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。