Freemarker入门案例
来源:互联网 发布:tensorflow 例子 编辑:程序博客网 时间:2024/05/10 09:53
首先需要到freemarker官方下载freemarker的jar包,导入到项目中,如:freemarker-2.3.19.jar
1、先建个freemarker的工具类,FreemarkerUtil.java
package com.ljq.fm;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class FreemarkerUtil { public Template getTemplate(String name) { try { // 通过Freemaker的Configuration读取相应的ftl Configuration cfg = new Configuration(); // 设定去哪里读取相应的ftl模板文件 cfg.setClassForTemplateLoading(this.getClass(), "/ftl"); // 在模板文件目录中找到名称为name的文件 Template temp = cfg.getTemplate(name); return temp; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 控制台输出 * * @param name * @param root */ public void print(String name, Map<String, Object> root) { try { // 通过Template可以将模板文件输出到相应的流 Template temp = this.getTemplate(name); temp.process(root, new PrintWriter(System.out)); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 输出HTML文件 * * @param name * @param root * @param outFile */ public void fprint(String name, Map<String, Object> root, String outFile) { FileWriter out = null; try { // 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径 out = new FileWriter(new File("E:/workspace/freemarkprj/page/" + outFile)); Template temp = this.getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } }}
2 、在src目录下建个ftl包,用于存放ftl模板文件,this.getClass() 就是根据当前类的路径获取模板文件位置
01.ftl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>测试</title></head><body><h1>你好${username}</h1></body></html>
02.ftl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h1>你好: ${username}</h1></body></html>
03.ftl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h1>${user.id}-----${user.name}-----${user.age}</h1><#if user.age lt 12> ${user.name}还是一个小孩<#elseif user.age lt 18> ${user.name}快成年<#else> ${user.name}已经成年</#if></body></html>
04.ftl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><#list users as user>${user.id}---------${user.name}-------${user.age}<br/></#list></body></html>
05.ftl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><hr/><#list users as user>${user.id}---------${user.name}-------${user.age}<br/></#list></body></html>
06.ftl
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>${user.id}-------${user.name}------${user.group!} <#-- !后为空就不输出 --><#--${user.group.name!}--><#-- 按照以上的方式加! freemarker仅仅只会判断group.name是不是空值 -->${(user.group.name)!"1234"} ${(a.b)!"没有a.b元素"}<#--!:指定缺失变量的默认值 ??:判断某个变量是否存在,返回boolean值 --><#if (a.b)??> <#--if后不用加$--> 不为空<#else> 为空</#if></body></html>
实体类User.java
package com.ljq.fm;import java.io.Serializable;@SuppressWarnings("serial")public class User implements Serializable { private int id; private String name; private int age; private Group group; public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } public User() { } public User(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
实体类Group.java
package com.ljq.fm;/** * * * @author 林计钦 * @version 1.0 2013-10-25 下午02:36:09 */public class Group { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
3、再建个Junit的测试类 FreemarkerTest.java
package com.ljq.fm;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class FreemarkerUtil { public Template getTemplate(String name) { try { // 通过Freemaker的Configuration读取相应的ftl Configuration cfg = new Configuration(); // 设定去哪里读取相应的ftl模板文件 cfg.setClassForTemplateLoading(this.getClass(), "/ftl"); // 在模板文件目录中找到名称为name的文件 Template temp = cfg.getTemplate(name); return temp; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 控制台输出 * * @param name * @param root */ public void print(String name, Map<String, Object> root) { try { // 通过Template可以将模板文件输出到相应的流 Template temp = this.getTemplate(name); temp.process(root, new PrintWriter(System.out)); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 输出HTML文件 * * @param name * @param root * @param outFile */ public void fprint(String name, Map<String, Object> root, String outFile) { FileWriter out = null; try { // 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径 out = new FileWriter(new File("E:/workspace/freemarkprj/page/" + outFile)); Template temp = this.getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } }}
0 0
- Freemarker入门案例
- Freemarker入门案例
- Freemarker入门案例
- Freemarker入门案例(一)
- Freemarker入门案例
- Freemarker入门案例
- FreeMarker入门级案例
- Freemarker入门案例(一)
- FreeMarker入门案例
- FreeMarker入门案例
- (2) freemarker入门案例2
- Freemarker 页面静态化技术使用入门案例
- FreeMarker系列--FreeMarker入门
- freemarker 入门
- freemarker 入门
- FreeMarker入门
- Freemarker入门
- FreeMarker 入门
- Codeforces Round #256 (Div. 2) C. Painting Fence (搜索 or DP)
- 个人博客搭建记录
- 面试题12打印1到最大的n位数
- Cocos2d html5 逐帧动画
- java数据类型
- Freemarker入门案例
- Java创建以及读写xml文档(dom方式)
- avro 1.7.7中存在致命的bug, 可以使用1.7.4版本
- Guava并发
- Android TextView 组件
- epuck kernel
- Freemarker 最简单的例子程序
- 关于cannot perform this action after onsaveinstancestate的解决办法
- actionbar tab 字体大小设置