FreeMarker基本標籤的使用

上一節我們接觸了一個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基本數據類型

發佈了55 篇原創文章 · 獲贊 5 · 訪問量 8334
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章