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,如需转载请自行联系原作者