首先須要到freemarker官方下載freemarker的jar包,導入到項目中,如:freemarker-2.3.19.jarhtml
一、先建個freemarker的工具類,FreemarkerUtil.javajava
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.ftlui
<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.ftlthis
<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.ftlspa
<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.ftlcode
<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.javahtm
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.javablog
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; } }
三、再建個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(); } } } }