上一節我們接觸了一個FreeMarker很簡單的例子FreeMarker入門教程 ,說到底,就是替換模板裏相應的標籤,這一節我們寫一下FreeMarker基本標籤的使用 。
在FreeMarker入門教程 ,相信你還刻模板裏的“你好:${username}”,這是簡單的輸出字符串,和EL很像吧,這一節我們來學其他標籤
輸出對象及判斷標籤的引用
我們先定義一個用戶類
package com.naxsu.freemarker;
public class User {
private int id;
private String name;
private int age;
// set get method
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public User() {
super();
}
}
模板中輸出用戶的相關屬性值和對年齡的簡單判斷文件03.ftl 如下
${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>
測試及輸出結果
@Test
public void test02() {
//輸出相應的對象
root.put("user", new User(1,"李四",16));
fu.print("03.ftl", root);
}
1-----李四-----16</h1>
李四快成年
循環標籤的使用
聲明兩個用戶對象,然後在模板文件中循環輸出
@Test
public void test02() {
List<User> users = Arrays.asList(
new User(1,"張三",22),new User(2,"李四",33));
root.put("users",users);
fu.print("03.ftl", root);
}
模板文件,主要是應用循環標籤
<#list users as user>
${user.id}---------${user.name}-------${user.age}
</#list>
輸出:
1--------- 張三 -------22
2--------- 李四 -------33
頁面包含
如果是一個top文件,你想包含在HTML中,即用include 標籤
被包含模板文件top.ftl:
<h1>歡迎${username}訪問我們的系統</h1>
主頁面:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<#include "/inc/top.ftl"/>
<hr/>
<#list users as user>
${user.id}---------${user.name}-------${user.age}<br/>
</#list>
</body>
</html>
測試方法和輸出:
@Test
public void test05() {
root.put("username", "管理員");
List<User> users = Arrays.asList(
new User(1,"張三",22),new User(2,"李四",33));
root.put("users",users);
fu.print("05.ftl",root);
}
///////////////////////
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>歡迎管理員訪問我們的系統</h1><hr/>
1---------張三-------22<br/>
2---------李四-------33<br/>
</body>
</html>
處理空值
在這裏新添加一個對象 Group ,在 User 引用這個對象,沒給 group 對象賦值的情況下測試處理空值的情況。
Group.java
package com.naxsu.freemarker;
public class Group {
private String name;
// set get method
public Group(String name) {
super();
this.name = name;
}
public Group() {
}
}
在 User.java 中引用 Group 對象
public class User {
private Group group;
//set get method
}
測試方法
@Test
public void test06() {
//此時user對象並沒有group的值
root.put("user",new User(1,"地點",22));
fu.print("06.ftl",root);
}
用!符號可以處理空值,在!號後面加字符串是在此對象不存在的情況下,顯示該字符串。
如果對象是空值,並沒有在後面加! 號,會直接報錯。
${user.id}-------${user.name}------${user.group!} ${user.id}-------${user.name}------${user.group!" 此時 user 對象並沒有 group 的值 "} |
1------- 地點 ------ 1------- 地點 ------ 此時 user 對象並沒有 group 的值 |
下面也會出錯,因爲此方式加!freemarker僅僅只會判斷group.name是不是空值
${user.group.name!} |
此問題的解決方案是把整個導航用小括號包起來,然後再加!
${(user.group.name)!"沒有任何值存在"} |
普通的字符串也可以用!來獲取空值:
${(a.b)!"沒有a.b元素"} |
沒有 a.b 元素 |
在if標籤中可以用兩個問號來判斷是否爲空
<#if (a.b)??> 不爲空 <#else> 爲空 </#if> |
爲空 |
定義變量
<#-- 定義變量--> <#assign username=" 張三"/> ${username} |
@Test public void test07() { root .put( "now" , new Date()); root .put( "username" , " 李四 " ); fu .print( "07.ftl" , root ); } |
張三 |
本文鏈接: FreeMarker基本標籤的使用 ,本文由huangyineng原創,轉載請註明出處
下一節:FreeMarker基本數據類型