摘要: 上一节我们接触了一个FreeMarker很简单的例子FreeMarker入门教程,说到底,就是替换模板里相应的标签,这一节我们写一下FreeMarker基本标签的使用
上一节我们接触了一个FreeMarker很简单的例子FreeMarker入门教程,说到底,就是替换模板里相应的标签,这一节我们写一下FreeMarker基本标签的使用。
在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;
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;
public Group(String name) {
super ();
this .name = name;
}
public Group() {
}
}
|
在User.java中引用Group对象
1
2
3
4
|
public class User {
private Group group;
}
|
测试方法
1
2
3
4
5
6
|
@Test
public void test06() {
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)!"没有任何值存在"}
|
普通的字符串也可以用!来获取空值:
${(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原创,转载请注明出处
|