1、配置对象:
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates"));
cfg.setObjectWrapper(new DefaultObjectWrapper());
2:得到模板对象:
Template temp = cfg.getTemplate("test.ftl");
Configuration对Template对象进行缓存。
3:合并模板和数据模型:
Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
4:数据模型:
任何模板要使用的数据模型都是通过object wrapping将传入的对象包装成实现TemplateModel接口的对象。
TemplateModel提供几个下级接口:TemplateSequenceModel等。
5:单值模型:Scalars
Boolean
Number
String
Date
Template
Type
Model
6:方法
public class IndexOfMethod implements TemplateMethodModel {
public TemplateModel exec(List args) throws TemplateModelException {
if (args.size() != 2) {
throw new TemplateModelException("Wrong arguments");
}
return new SimpleNumber(
((String) args.get(1)).indexOf((String) args.get(0)));
}
}
root.put("indexOf", new IndexOfMethod());
<#assign x = "something">
${indexOf("met", x)}
${indexOf("foo", x)}
7:Transforms
import java.io.*;
import java.util.*;
import freemarker.template.TemplateTransformModel;
class UpperCaseTransform implements TemplateTransformModel {
public Writer getWriter(Writer out, Map args) {
return new UpperCaseWriter(out);
}
private class UpperCaseWriter extends Writer {
private Writer out;
UpperCaseWriter (Writer out) {
this.out = out;
}
public void write(char[] cbuf, int off, int len)
throws IOException {
out.write(new String(cbuf, off, len).toUpperCase());
}
public void flush() throws IOException {
out.flush();
}
public void close() {
}
}
}
root.put("upperCase", new UpperCaseTransform());
<@upperCase>
blah2
blah3
</@upperCase>
8:访问freemarker的环境变量:
Environment.getCurrentEnvironment().
9:共享变量是指所有模板都能访问的变量,在configuration中设置。
cfg.setSharedVariable("to_upper", new UpperCaseTransform());
cfg.setSharedVariable("company", "Foo Inc.");
数据模型中的变量将会隐藏同名的共享变量。
TemplateModel的实现不是线层安全的,因此不能用于共享变量。
预置共享变量:
name | class |
---|
capture_output | freemarker.template.utility.CaptureOutput |
compress | freemarker.template.utility.StandardCompress |
html_escape | freemarker.template.utility.HtmlEscape |
normalize_newlines | freemarker.template.utility.NormalizeNewlines |
xml_escape | freemarker.template.utility.XmlEscape |
10:设置层次:configuration, template, runtime environment
posted on 2007-03-25 21:38
不做浮躁的人 阅读(1121)
评论(0) 编辑 收藏 所属分类:
freemarker