FreeMarker 对象包装(五)

1. 模板文件 test06.ftl

${theObject.name}
${theObject.price}
${theObject.sin(123)}

2. 对象类 TestObject.java

package com.freemarker.test06.ObjectWrappers;

public class TestObject {
    private String name;
    private int price;

    public TestObject() {}
    public TestObject(String name, int price) {
        this.name = name;
        this.price = price;
    }

    // JavaBean 的属性
    // 注意公有字段不能直接可见;
    // 你必须为它们编写 getter 方法。
    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    // 一个方法
    public double sin(double x) {
        return Math.sin(x);
    }
}

3. 测试类 Test.java

package com.freemarker.test06.ObjectWrappers;

import freemarker.template.*;
import java.util.*;
import java.io.*;

public class Test {

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

        // 创建 Freemarker 配置实例
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
        // 指定模板文件从何处加载的数据源,这里设置成一个文件目录。
        cfg.setDirectoryForTemplateLoading(new File("templates"));
        cfg.setDefaultEncoding("UTF-8");
        // 简单地重新抛出异常; 这应该在大多数生产系统中使用。
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

        // 创建一个数据模型
        Map root = new HashMap();
        //SimpleHash root = new SimpleHash();
        // 测试对象包装 --------------------------------
        root.put("theObject", new TestObject("green mouse", 1200));

        // 获取模板(使用内部缓存)
        Template temp = cfg.getTemplate("test06.ftl");

        // 合并数据模型模板
        Writer out = new OutputStreamWriter(System.out);
        temp.process(root, out);
        out.flush();
        out.close();
        // 注意: ------------
        // 为了简单起见,这里压制了异常(在方法签名中声明了异常,译者注),而在正式运行的产品中不要这样做。
    }
}

运行结果

green mouse
1,200
-0.46

你可能感兴趣的:(freemarker)