标签:
它是为Java程序猿提供的一个开发包。它不是面向终于用户的,而是为程序猿提供的一款能够嵌入他们所开发产品的应用程序。
这样的分离的思想即便对一个程序猿和页面设计师是同一个人的项目来说也都是很实用的,由于分离使得代码保持简洁并且易于维护。
模板仅仅负责数据在页面中的表现。不涉及不论什么的逻辑代码,而全部的逻辑都是由数据模型来处理的。用户终于看到的输出是模板和数据模型合并后创建的。
我们都知道。JSP在第一次运行的时候须要转换成Servlet类,开发阶段进行功能调试时,须要频繁的改动JSP,每次改动都要编译和转换。那么试想一下,一天中我们浪费在程序编译的时间有多少。
使得在整个流程的进行中。生成不同的表单就简单了非常多。
FreeMarker没有一个默认的null处理。甚至也不接受一个null值。想避免错误就要应用if/elseif/else 指令进行判段,假设对每个变量都推断的话,那么则反而添加了编程的麻烦。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import junit.framework.TestCase;
public class FreemarkerTest extends TestCase {
private String dir = "E:/.../OA/TestTotal/src/com/bjsxt/oa/freemarker";
public void testFreemarker() {
Configuration cfg = new Configuration();
try {
// 从哪里载入模板文件
cfg.setDirectoryForTemplateLoading(new File(dir));
// 定义模版的位置,从类路径中,相对于FreemarkerManager所在的路径载入模版
// cfg.setTemplateLoader(new ClassTemplateLoader(FreemarkerManager.class, "templates"))
// 设置对象包装器
cfg.setObjectWrapper(new DefaultObjectWrapper());
// 设置异常处理器
cfg
.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
// 定义数据模型
Map root = new HashMap();
root.put("abc", "世界。你好");
// 通过freemarker解释模板,首先须要获得Template对象
Template template = cfg.getTemplate("test.ftl");
// 定义模板解释完毕之后的输出
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter(dir+"/out.txt")));
try {
// 解释模板
template.process(root, out);
} catch (TemplateException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
第一个測试程序:${abc}
第一个測试程序:世界。你好
标签:
原文地址:http://www.cnblogs.com/lcchuguo/p/5183370.html