FreeMarker是一款模板引擎
引入测试项目: 链接:https://pan.baidu.com/s/1cth8110m5GZHDde4ztYEWQ 提取码:16u0
在Freemarker中就三种角色: 模板/数据/html
从数据库中取出数据, 结合模板就能生成html的静态页面
项目结构图:
模板1:
模板1的内容:
测试代码:
package com.rl.ecps.ftl;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import cn.itcast.freemarker.FMutil;
public class FMTest {
Map<String, Object> map = new HashMap<String, Object>();
@Test
public void test1() throws Exception {
map.put("username", "zhangsan");
FMutil.outputFile("fm1.ftl", map, "fm1.html");
}
}
结果如下:
模板2:
模板2的内容:
测试代码:
@Test
public void test2() throws Exception {
map.put("username", "张三");
FMutil.outputFile("fm2.ftl", map, "fm2.html");
}
结果如下:
模板3:
模板3的内容:
测试代码:
@Test
public void test3() throws Exception {
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(20);
map.put("user", user);
FMutil.outputFile("fm3.ftl", map, "fm3.html");
}
结果如下:
Freemarker中的语法:
//注释
<#-- [注释的内容] -->
//判断
<#if [条件]> [结论] <#elseif [条件]> [结论] </#if>
在if中取值无需${}
//循环
<#list [集合] as 变量> [内容] </#list>
在循环的条件中取值无需${}
"${user_index}" 代表取当前索引
模板4:
模板4的内容:
测试代码:
@Test
public void test4() throws Exception {
List<User> userList = new ArrayList<User>();
for(int i = 0; i < 5; i++){
User user = new User();
user.setId(i);
user.setName("张三");
user.setAge(20);
userList.add(user);
}
map.put("userList", userList);
FMutil.outputFile("fm4.ftl", map, "fm4.html");
}
结果如下:
模板5:
模板5的内容:
模板中包含模板:
top1.ftl的内容:
此时map中需要提供模板需要的数据和被包含的模板所需要的数据
测试代码:
@Test
public void test5() throws Exception {
List<User> userList = new ArrayList<User>();
for(int i = 0; i < 5; i++){
User user = new User();
user.setId(i);
user.setName("张三");
user.setAge(20);
userList.add(user);
}
map.put("username", "王五");
map.put("userList", userList);
FMutil.outputFile("fm5.ftl", map, "fm5.html");
}
结果如下:
模板6:
模板6的内容:
结果如下:
模板7:
模板7的内容:
Freemarker中的变量的使用:
<#assign name="zhangsan">
<#assign [变量名]=[变量值]> //跟js一样, 由值来决定数据类型
Freemarker中的变量名是可以重复的, 跟js的语法类似
结果如下: