本文是我学习过程总结的,部分资料来自网上
freemarker的基本使用:
>什么是freemarker?
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
>当前主要用途:
主要用Freemarker做静态页面或是页面展示。
>使用前提:
需要导入jar包(freemarker-2.3.9.jar)
如果是maven项目,则是:
<dependency><groupId>freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.9</version></dependency>
>具体使用以及基本语法:
freemarker生成页面是需要一个模板的,以此来生成需要的静态页面
这里就以一个demo为例子
建立maven项目freemaker
在resource下建立ftl文件夹,在该文件夹下建立文件freemarker.html作为模板
(这里需要说明下,freemarker模板是没有要求名字和后缀格式要求的,一般后缀习惯用.ftl,也有人用.html,因为html在打入代码是有自动提示,比较方便)。
在pom.xml加入freemarker的依赖(上面已给出),接着在src/main/java下建立包,建立java文FreemarkerDemo.java以及javabean文件 person.java
具体代码如下:
person.java
package com.hw;public class Person {private int id;private String name;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;}}
FreemakerDemo.java
package com.hw;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;/*** 测试freemaker* Freemaker环境* @author Administrator**/public class FreemakerDemo {public static void main(String[] args) throws IOException, TemplateException {//配置对象Configuration conf = new Configuration();//模板路径String dir = "E:\\javaee\\freemaker\\src\\main\\resources\\ftl\\";// String dir = "/ftl/"//导入模板目录conf.setDirectoryForTemplateLoading(new File(dir));//获取模板Template template = conf.getTemplate("freemaker.html");//数据Map root = new HashMap();//1root.put("hello", "世界你好");//2Person person = new Person();person.setId(111);person.setName("我");root.put("p", person);//3List<String> s = new ArrayList<String>();s.add("张三");s.add("李四");s.add("王五");root.put("s", s);//4Map mx = new HashMap();mx.put("fbb", "张三");mx.put("lbb", "李四");mx.put("33", "王五");root.put("mx", mx);//5List<Map> maps = new ArrayList<Map>();Map pms1 = new HashMap();pms1.put("id1", "范冰冰");pms1.put("id2", "李冰冰");Map pms2 = new HashMap();pms2.put("id1", "曾志伟");pms2.put("id2", "何炅");maps.add(pms1);maps.add(pms2);root.put("maps", maps);//nroot.put("cur_time", new Date());//nullroot.put("world", null);//输出流Writer out = new FileWriter(new File(dir+"hello.html"));//开始生成template.process(root, out);out.close();System.out.println("生成完毕");}}
上面的例子我把几种常用的freemarker使用语法测试都写进去了
下面的模板freemarker.html
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>${hello}${p.id}/${p.name}<#list s as s>${s}</#list><#list mx?keys as key>${mx[key]}</#list><!-- key为数字下面好像不能用 -->${mx.fbb}/${mx.lbb}<#list maps as map><#list map?keys as key>${map[key]}</#list></#list><#list maps as map>${map.id1}/${map.id2}</#list><#list s as s>${s_index}</#list><#assign x=0/>${x}<#assign x='${hello}'/>${x}<#assign x>世界太好了</#assign>${x}<#assign x><#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>${n}</#list></#assign>${x}<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n><#if n != "星期一">${n}</#if></#list><#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n><#if (n_index == 1) || (n_index == 3)>${n} --红色<#else>${n} --绿色</#if></#list>${cur_time?date}${cur_time?time}${cur_time?datetime}${world!"我是null"}${world!}<#macro table u>${u}<#nested></#macro><@table u=8/><@table u=8>这是8</@table></body></html>
运行freemarkerDemo,java的方法后,将会在ftl下看到生成的静态页面
hello.html
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>世界你好111/我张三李四王五王五李四张三<!-- key为数字下面好像不能用 -->张三/李四李冰冰范冰冰何炅曾志伟范冰冰/李冰冰曾志伟/何炅0120世界你好世界太好了星期一星期二星期三星期四星期五星期六星期天星期二星期三星期四星期五星期六星期天星期一 --绿色星期二 --红色星期三 --绿色星期四 --红色星期五 --绿色星期六 --绿色星期天 --绿色2016-6-316:07:382016-6-3 16:07:38我是null88这是8</body></html>
各位仔细对比下可能就看出来freemarker的语法了
有点类似jstl标签
下面简单总结下:
>访问变量:
${变量名} ${hello}
>访问对象:
${对象名.属性}
ex:
${person.id} ${person.name}
>遍历集合/数组
ex:
<#list persons as p>
${p.id}/${p.name}
</#list>
>输出map集合:
ex:
<#list mx?keys as key>
${mx[key]}
</#list>
<!-- key为数字下面方式好像不能用 -->
${mx.fbb}/${mx.lbb}
>获得当前迭代的索引
ex:<#list persons as p>
${p_index}
</#list>
>在模版中进行赋值
ex:
1:
<#assign x=0 />
${x}
2:
<#assign x="${world}" />
${x}
3:
<#assign x>世界太好了</#assign>
${x}
4:
<#assign x>
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
${n}
</#list>
</#assign>
${x}
>#if
ex:
1:== !=
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
<#if n != "星期一">
${n}
</#if>
</#list>
2:按索引
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
<#if n_index != 0>
${n}
</#if>
</#list>
3: || &&
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
<#if (n_index == 1) || (n_index == 3)>
${n}
</#if>
</#list>
>#else
ex:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
<#if (n_index == 1) || (n_index == 3)>
${n} --红色
<#else>
${n} --绿色
</#if>
</#list>
>格式化日期:
ex:
ex:
1:date
${cur_time?date}
2:datetime
${cur_time?datetime}
3:time
${cur_time?time}
>null处理
1:null 变 空串
${val!} ${val!"这里是空"}
2:为Null时给默认值
${val!“我是默认值"}
>宏定义:
宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量
ex:
<#macro table u>
${u}
</#macro>
<@table u=8 />
2:
<#macro table u>
${u}
<#nested/>
</#macro>
<@table u=8 >这是8</@table>
>include
ex:
将另一个页面引入本页面时可用以下命令完成
<#include "/include/head.html">
本文详细介绍Freemarker模板引擎的基础使用方法,包括环境搭建、常用语法解析及示例演示,帮助读者快速掌握Freemarker的基本操作。

1290

被折叠的 条评论
为什么被折叠?



