Freemarker的使用
来源:互联网 发布:淘宝c 编辑:程序博客网 时间:2024/06/10 00:32
Freemarker简介
Freemakrer是用于java中通过向已定义好的模板文件中传递map或JavaBean,从而生成<<文本>>文件的一个工具。
网站 :http://freemarker.sourceforge.net/
在线文档 :http://freemarker.sourceforge.net/docs/index.html
当然,网上也有中文版的pdf文档,也很实用。
书写javaBean
由于我想实验传递javaBean,毕竟Map的使用还是有些麻烦。在这个javaBean中将一般常用类型都包含了。
- import java.math.BigDecimal;
- import java.sql.Date;
- import java.sql.Time;
- import java.sql.Timestamp;
- public class SimpleBean {
- private boolean bolField;
- private int intField;
- private BigDecimal bigDecimal;
- private String string;
- private Date date;
- private Time time;
- private Timestamp timestamp;
- }
书写Freemarker的模板文件
其实就是从源码中帖过来小小改动即可。
- <@license/>
- <#list list as bean>
- static class SimpleBean {
- private boolean bolField; <#if bean.bolField>true<#else>false</#if> ${bean.bolField?string("yes","no")}
- private int intField; ${bean.intField}
- private BigDecimal bigDecimal; ${bean.bigDecimal!'default value while empty'}
- private String string; ${bean.string!}
- private Date date; ${bean.date!}
- private Time time; ${bean.time!}
- private Timestamp timestamp; ${bean.timestamp!}
- }
- </#list>
自定义的tag标记
请注意,我使用了一个自定义的tag标记,这个实现也很简单,实现TemplateDirectiveModel即可。
- public class LicenseDirective implements TemplateDirectiveModel {
- public void execute(Environment env, Map params, TemplateModel[] loopVars,
- TemplateDirectiveBody body) throws TemplateException, IOException {
- env.getOut().append("/**\n * @author colin\n */");
- }
- }
程序主体的代码
- public class UsingFreemarker {
- public static void main(String[] args) throws Exception {
- Configuration cfg = new Configuration();
- cfg.setObjectWrapper(new DefaultObjectWrapper());
- cfg.setClassForTemplateLoading(UsingFreemarker.class, "");
- cfg.setNumberFormat("0.####");
- cfg.setDateFormat("yyyy-MM-dd");
- cfg.setTimeFormat("hh:mm");
- cfg.setDateTimeFormat("yyyy-MM-dd hh:mm");
- // cfg.setBooleanFormat("true,false"); // 无效果
- cfg.setSharedVariable("license", new LicenseDirective());
- List list = new ArrayList();
- list.add(new SimpleBean(false, 0, null, null, null, null, null));
- long now = new java.util.Date().getTime();
- list.add(new SimpleBean(true, 1, new BigDecimal("12.345678"),
- "freemarker", new Date(now), new Time(now), new Timestamp(now)));
- Map root = new HashMap();
- root.put("list", list);
- // File file = new File("Hello.txt");
- // FileOutputStream fos = new FileOutputStream(file);
- // Writer out = new OutputStreamWriter(fos);
- Writer out = new OutputStreamWriter(System.out);
- Template t = cfg.getTemplate("hello.ftl");
- t.process(root, out);
- out.flush();
- }
- }
运行
- /**
- * @author colin
- */
- static class SimpleBean {
- private boolean bolField; false no
- private int intField; 0
- private BigDecimal bigDecimal; default value while empty
- private String string;
- private Date date;
- private Time time;
- private Timestamp timestamp;
- }
- static class SimpleBean {
- private boolean bolField; true yes
- private int intField; 1
- private BigDecimal bigDecimal; 12.3457
- private String string; freemarker
- private Date date; 2011-03-13
- private Time time; 10:22
- private Timestamp timestamp; 2011-03-13 10:22
- }
注意事项:
- Freemarker对于null的结果会抛异常,需要自己处理。比如:
- ! 输出空格
- !'the default while empty' 指定一个为空时候的默认值
- Freemarker对于boolean的结果会抛异常,需要自己处理。比如:
- cfg.setBooleanFormat("true,false"); 在我这边尝试,没有效果,还是需要额外处理boolean的输出
- <#if bean.bolField>true<#else>false</#if> 用if else 判断一下,输出自定义的值
- ${bean.bolField?string(“yes”,”no”)} 转义
- freemarker的使用心得,freemarker使用心得
- Freemarker的使用
- freemarker的初步使用
- freemarker 的使用
- freemarker的TemplateExceptionHandler使用
- freemarker的使用心得
- FreeMarker的简单使用
- Freemarker的使用
- Freemarker的使用
- freemarker的使用总结
- freemarker的使用
- 关于FreeMarker的使用
- Freemarker的使用
- freemarker的使用心得
- SpringMVC+FreeMarker的使用
- freemarker的使用
- freemarker的使用
- Freemarker的使用
- leetcode之Palindrome Partitioning
- 域名基础知识
- View的setOnClickListener的添加方法
- 【Android 调用谷歌语音识别】
- 在基于对话框的MFC中添加工具栏以及工具栏提示信息并改变图标支持256色
- Freemarker的使用
- Power of Cryptography poj 2109 精度问题
- adb常用命令
- vi编辑器快捷键
- 关于JAVA匿名内部类的一点讨论.
- ios框架详解系列(一)----UIViewController
- 登录查询学生信息
- Linux网络代码导读v0.2
- 第九章类定义