天天看點

FreeMarker中擷取Map内容

1、 FreeMarker首頁

<a href="http://www.freemarker.org/index.html">http://www.freemarker.org/index.html</a>

2、

import java.io.File; 

import java.io.FileOutputStream; 

import java.io.OutputStreamWriter; 

import java.io.Writer; 

import java.util.HashMap; 

import java.util.Map; 

import freemarker.template.Configuration; 

import freemarker.template.Template; 

public class Test1 { 

    private Configuration cfg; 

    public Configuration getCfg() { 

        return cfg; 

    } 

    public void init() throws Exception { 

        cfg = new Configuration(); 

        //cfg.setDirectoryForTemplateLoading(new File("bin/freemarker")); 

        cfg.setDirectoryForTemplateLoading(new File("src/test/java/com/alibaba/panama/core")); 

    public static void main(String[] args) throws Exception { 

        Test1 obj = new Test1(); 

        obj.init(); 

        Map root = new HashMap(); 

        root.put("hello", "world"); 

        root.put("hi", "welcome"); 

Map map2 = new HashMap(); map2.put("a", "A"); map2.put("b", "B");

root.put("m", map2);

        Template t = obj.getCfg().getTemplate("Test1.ftl"); 

        Writer out = new OutputStreamWriter(new FileOutputStream("Test1.html"), "UTF-8"); 

        t.process(root, out); 

        System.out.println("Successfull................"); 

模版:Test1.ftl

&lt;#macro greet person,website&gt; 

  Hello ${person}! Your Website is ${website}. 

  &lt;/#macro&gt; 

  &lt;html&gt; 

  &lt;head&gt; 

  &lt;title&gt;Hello World&lt;/title&gt; 

  &lt;/head&gt; 

  &lt;body&gt; 

  &lt;@greet person="老紫竹" website="www.java2000.net"/&gt; 

  ${hello} 

    ${hi} 

${m.a}

  &lt;/body&gt; 

  &lt;/html&gt; 

運作結果,生成:Test1.htm

&lt;html&gt; 

&lt;head&gt; 

&lt;title&gt;Hello World&lt;/title&gt; 

&lt;/head&gt; 

&lt;body&gt; 

  Hello 老紫竹! Your Website is www.java2000.net. 

world 

welcome 

A

&lt;/body&gt; 

&lt;/html&gt; 

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

rapid_framework項目相關資訊

home page:

<a href="http://code.google.com/p/rapid-framework/">http://code.google.com/p/rapid-framework/</a>

<a href="http://grepcode.com/snapshot/repo1.maven.org/maven2/com.googlecode.rapid-framework/rapid-generator/4.0/">http://grepcode.com/snapshot/repo1.maven.org/maven2/com.googlecode.rapid-framework/rapid-generator/4.0/</a>

rapid_framework中處理生成代碼的過程:

  generateByMap-&gt;ProcessUtils類中的各種方法-&gt;processByGeneratorModel-&gt;generateBy-&gt;processTemplateRootDirs-&gt;scanTemplatesAndProcess-&gt;executeGenerate -&gt; processTemplateForGeneratorControl -&gt; process(FreeMarker的Template類的process方法)

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

freemarker模闆:

package ${basepackage}; 

import org.junit.Test; 

import static junit.framework.Assert.*; 

public class ${className} { 

    &lt;#list caseSuite.caseModels as caseModel&gt; 

    /** 

     * @uid     ${caseModel["uid"]}   

     * @場景描述  ${caseModel["場景描述"]!} 

     * @前置條件  ${caseModel["前置條件"]!} 

     * @期望結果  ${caseModel["期望結果"]!} 

     * @測試步驟  ${caseModel["測試步驟"]!} 

     * @是否自動化執行 ${caseModel["是否自動化執行"]!} 

     * @負責人   ${caseModel["負責人"]!}     

     */ 

    &lt;#-- @Test  

    public void  ${caseModel["方法名"]!"undefined"}(){ 

    --&gt;     

    public void ${caseModel["方法名"]!("undefined${caseModel['uid']}")}(){ 

    &lt;/#list&gt; 

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

1、Comments 注釋:FreeMarker 的注釋和HTML 的注釋相似,但是它用&lt;#--和--&gt;來分隔的。任何介于這兩個分隔符(包含分隔符本身)之間内容會被FreeMarker 忽略,就不會輸出出來了。

2、不論在哪裡引用變量,都可以指定一個預設值來避免變量丢失這種情況,通過在變量名後面跟着一個!和預設值。就像下面的例子,當user 從資料模型中丢失時,模闆将會将user 的值表示為字元串”Anonymous”。(若user 并沒有丢失,那麼模闆就會表現出”Anonymous”不存在一樣)

&lt;h1&gt;Welcome ${user!"Anonymous"}!&lt;/h1&gt;

3、當然也可以在變量名後面通過放置??來詢問FreeMarker 一個變量是否存在。将它和if指令合并,那麼如果user 變量不存在的話将會忽略整個問候代碼段:

&lt;#if user??&gt;&lt;h1&gt;Welcome ${user}!&lt;/h1&gt;&lt;/#if&gt;

本文轉自 tianya23 51CTO部落格,原文連結:http://blog.51cto.com/tianya23/620885,如需轉載請自行聯系原作者