1、 FreeMarker主页

http://www.freemarker.org/index.html

2、

 
  
  1. import java.io.File; 
  2. import java.io.FileOutputStream; 
  3. import java.io.OutputStreamWriter; 
  4. import java.io.Writer; 
  5. import java.util.HashMap; 
  6. import java.util.Map; 
  7. import freemarker.template.Configuration; 
  8. import freemarker.template.Template; 
  9.  
  10. public class Test1 { 
  11.     private Configuration cfg; 
  12.  
  13.     public Configuration getCfg() { 
  14.         return cfg; 
  15.     } 
  16.  
  17.     public void init() throws Exception { 
  18.         cfg = new Configuration(); 
  19.         //cfg.setDirectoryForTemplateLoading(new File("bin/freemarker")); 
  20.         cfg.setDirectoryForTemplateLoading(new File("src/test/java/com/alibaba/panama/core")); 
  21.     } 
  22.  
  23.     public static void main(String[] args) throws Exception { 
  24.         Test1 obj = new Test1(); 
  25.         obj.init(); 
  26.         Map root = new HashMap(); 
  27.         root.put("hello""world"); 
  28.         root.put("hi""welcome"); 
  29.  
  30. Map map2 = new HashMap(); map2.put("a", "A"); map2.put("b", "B");
  31. root.put("m", map2);
  32.         Template t = obj.getCfg().getTemplate("Test1.ftl"); 
  33.         Writer out = new OutputStreamWriter(new FileOutputStream("Test1.html"), "UTF-8"); 
  34.         t.process(root, out); 
  35.         System.out.println("Successfull................"); 
  36.     } 

 

模版:Test1.ftl

 
  
  1. <#macro greet person,website> 
  2.   Hello ${person}! Your Website is ${website}. 
  3.   </#macro> 
  4.   <html> 
  5.   <head> 
  6.   <title>Hello World</title> 
  7.   </head> 
  8.   <body> 
  9.   <@greet person="老紫竹" website="www.java2000.net"/> 
  10.  
  11.   ${hello} 
  12.     ${hi} 
  13. ${m.a}
  14.   </body> 
  15.   </html> 

运行结果,生成:Test1.htm

 
  
  1. <html> 
  2. <head> 
  3. <title>Hello World</title> 
  4. </head> 
  5. <body> 
  6.   Hello 老紫竹! Your Website is www.java2000.net. 
  7.  
  8. world 
  9. welcome 
  10. A
  11. </body> 
  12. </html> 

同时可参考:http://oecpby.blog.51cto.com/2203338/424590 

=========================================================================

rapid_framework项目相关信息

home page:

http://code.google.com/p/rapid-framework/

http://grepcode.com/snapshot/repo1.maven.org/maven2/com.googlecode.rapid-framework/rapid-generator/4.0/

rapid_framework中处理生成代码的过程:

  generateByMap->ProcessUtils类中的各种方法->processByGeneratorModel->generateBy->processTemplateRootDirs->scanTemplatesAndProcess->executeGenerate -> processTemplateForGeneratorControl -> process(FreeMarker的Template类的process方法)

 

 =======================

freemarker模板:

 

 

 
  
  1. package ${basepackage}; 
  2.  
  3.  
  4. import org.junit.Test; 
  5.  
  6. import static junit.framework.Assert.*; 
  7.  
  8.  
  9.  
  10. public class ${className} { 
  11.      
  12.  
  13.     <#list caseSuite.caseModels as caseModel> 
  14.      
  15.     /** 
  16.      * @uid     ${caseModel["uid"]}   
  17.      * @场景描述  ${caseModel["场景描述"]!} 
  18.      * @前置条件  ${caseModel["前置条件"]!} 
  19.      * @期望结果  ${caseModel["期望结果"]!} 
  20.      * @测试步骤  ${caseModel["测试步骤"]!} 
  21.      * @是否自动化执行 ${caseModel["是否自动化执行"]!} 
  22.      * @负责人   ${caseModel["负责人"]!}     
  23.      */ 
  24.     <#-- @Test  
  25.     public void  ${caseModel["方法名"]!"undefined"}(){ 
  26.          
  27.     } 
  28.     -->     
  29.     public void ${caseModel["方法名"]!("undefined${caseModel['uid']}")}(){ 
  30.          
  31.     } 
  32.      
  33.     </#list> 
  34.          

=============================================== 

1、Comments 注释:FreeMarker 的注释和HTML 的注释相似,但是它用<#--和-->来分隔的。任何介于这两个分隔符(包含分隔符本身)之间内容会被FreeMarker 忽略,就不会输出出来了。

 

2、不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名后面跟着一个!和默认值。就像下面的例子,当user 从数据模型中丢失时,模板将会将user 的值表示为字符串”Anonymous”。(若user 并没有丢失,那么模板就会表现出”Anonymous”不存在一样)

<h1>Welcome ${user!"Anonymous"}!</h1>

 

3、当然也可以在变量名后面通过放置??来询问FreeMarker 一个变量是否存在。将它和if指令合并,那么如果user 变量不存在的话将会忽略整个问候代码段:

<#if user??><h1>Welcome ${user}!</h1></#if>