在FreeMarker入门教程,相信你还刻模板里的“你好:${username}”,这是简单的输出字符串,和EL很像吧,这一节我们来学其他标签
输出对象及判断标签的引用
我们先定义一个用户类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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如下
|
1
2
3
4
5
6
7
8
9
|
${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
>
|
测试及输出结果
|
1
2
3
4
5
6
7
8
9
10
|
@Test
public
void
test02() {
//输出相应的对象
root.put(
"user"
,
new
User(
1
,
"李四"
,
16
));
fu.print(
"03.ftl"
, root);
}
1
-----李四-----
16
</h1>
李四快成年
|
循环标签的使用
声明两个用户对象,然后在模板文件中循环输出
|
1
2
3
4
5
6
7
|
@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);
}
|
模板文件,主要是应用循环标签
|
1
2
3
|
<#list users as user>
${user.id}---------${user.name}-------${user.age}
</#list>
|
输出:
1---------张三-------22
2---------李四-------33
页面包含
如果是一个top文件,你想包含在HTML中,即用include 标签
被包含模板文件top.ftl:
|
1
|
<h1>欢迎${username}访问我们的系统</h1>
|
主页面:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<
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
>
|
测试方法和输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@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
|
1
2
3
4
5
6
7
8
9
10
11
|
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对象
|
1
2
3
4
|
public
class
User {
private
Group group;
//set get method
}
|
测试方法
|
1
2
3
4
5
6
|
@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模板引擎的基础用法,包括输出对象属性、条件判断、循环标签使用及页面包含等技巧,并演示如何处理空值。
2296

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



