上一节我们接触了一个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}
<#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
李四快成年
循环标签的使用
声明两个用户对象,然后在模板文件中循环输出
@Test
public void test02() {
List 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:
欢迎${username}访问我们的系统
主页面:
Insert title here
<#include "/inc/top.ftl"/>
<#list users as user>
${user.id}---------${user.name}-------${user.age}
#list>
测试方法和输出:
@Test
public void test05() {
root.put("username", "管理员");
List users = Arrays.asList(
new User(1,"张三",22),new User(2,"李四",33));
root.put("users",users);
fu.print("05.ftl",root);
}
///////////////////////
Insert title here
欢迎管理员访问我们的系统
1---------张三-------22
2---------李四-------33
处理空值
在这里新添加一个对象 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基本数据类型