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
<#macro greet person,website>
Hello ${person}! Your Website is ${website}.
</#macro>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<@greet person="老紫竹" website="www.java2000.net"/>
${hello}
${hi}
${m.a}
</body>
</html>
運作結果,生成:Test1.htm
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello 老紫竹! Your Website is www.java2000.net.
world
welcome
A
</body>
</html>
=========================================================================
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->ProcessUtils類中的各種方法->processByGeneratorModel->generateBy->processTemplateRootDirs->scanTemplatesAndProcess->executeGenerate -> processTemplateForGeneratorControl -> process(FreeMarker的Template類的process方法)
=======================
freemarker模闆:
package ${basepackage};
import org.junit.Test;
import static junit.framework.Assert.*;
public class ${className} {
<#list caseSuite.caseModels as caseModel>
/**
* @uid ${caseModel["uid"]}
* @場景描述 ${caseModel["場景描述"]!}
* @前置條件 ${caseModel["前置條件"]!}
* @期望結果 ${caseModel["期望結果"]!}
* @測試步驟 ${caseModel["測試步驟"]!}
* @是否自動化執行 ${caseModel["是否自動化執行"]!}
* @負責人 ${caseModel["負責人"]!}
*/
<#-- @Test
public void ${caseModel["方法名"]!"undefined"}(){
-->
public void ${caseModel["方法名"]!("undefined${caseModel['uid']}")}(){
</#list>
===============================================
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>
本文轉自 tianya23 51CTO部落格,原文連結:http://blog.51cto.com/tianya23/620885,如需轉載請自行聯系原作者