FreeMarker入門指南

文章首發於個人我的博客,到我的博客體驗更佳閱讀哦html

www.itqiankun.comjava

FreeMarker幫助學習網址

介紹一個FreeMarker的在線測試的好工具:www.itqiankun.com/utils?type=…spring

FreeMarker官網地址 freemarker.apache.orgexpress

Idea配置FreeMarker

一張圖就搞定了,配置好以後,在重啓就行了apache

image

FreeMarker的switch用法

FreeMarker的switch的基本語法是:app

<#switch value> 
<#case refValue>...<#break> 
<#case refValue>...<#break> 
<#default>... 
</#switch>
複製代碼

使用例子以下: FreeMarker的代碼工具

<#assign xNum = 30>
<#switch xNum> 
<#case 10> 
	xNum等於10
<#break> 
<#case 20> 
	xNum等於20
<#break> 
<#default> 
	xNum不等於10也不等於20
</#switch>
複製代碼

藉助上面的在線測試網址,此時結果就是學習

image

FreeMarker的#if,#elseif,#else

FreeMarker的#if,#elseif,#else的基本語法是:測試

<#if condition>...
<#elseif condition2>...
<#elseif condition3>...
<#else>...
</#if>
複製代碼

使用例子以下: FreeMarker的代碼this

<#assign hello = 'MONTH'> 
<#if hello == 'MONTH'><#elseif hello == 'QUARTER'><#elseif hello == 'HALF_A_YEAR'>
    半年
<#elseif hello == 'YEAR'><#else>
    /
</#if>
複製代碼

藉助上面的在線測試網址,此時結果就是

image

FreeMarker的三目運算符

FreeMarker的三目運算符的基本語法是:(true)?string('true', 'false') 使用例子以下: FreeMarker的代碼

<#assign hello = 0>
${(hello == 0)?string('等於0','不等於0')}
<#assign world = 1>
${(world == 0)?string('等於0','不等於0')}
複製代碼

藉助上面的在線測試網址,此時結果就是

image

FreeMarker的!符號

!和${}配置使用,若是沒有變量,那麼就添加!符號後面的值爲默認值 使用例子以下: FreeMarker的代碼

<#assign user = "itqiankun.com">
<h1>Welcome ${user!"Anonymous"}!</h1>

<#assign user = "itqiankun.com">
<h1>Welcome ${hello!"Anonymous"}!</h1>
 
複製代碼

藉助上面的在線測試網址,此時結果就是

image

FreeMarker的??符號

??的做用是在變量名後面來判斷一個變量是否存在 使用例子以下: FreeMarker的代碼

<#assign cc = "itqiankun.com">
<#if cc??><h1>Welcome ${cc}</h1></#if>
<#if ss??><h1>Welcome ${ss}</h1><#else>no_one</#if>
複製代碼

藉助上面的在線測試網址,此時結果就是

image

FreeMarker的?c符號

?c的做用是把一個整數變成字符串 使用例子以下: FreeMarker的代碼

<#assign hello=22/>
<#assign seasons = {"22":"jj"}>
 ${seasons[hello?c]}

複製代碼

藉助上面的在線測試網址,此時結果就是

image
上面的代碼若是不把整數變成字符串的話,就會報錯

<#assign hello=22/>
<#assign seasons = {"22":"jj"}>
 ${seasons[hello]}
複製代碼

此時報錯以下所示

image

FreeMarker的#sep的使用

在遍歷list的時候,咱們須要加上,符號的時候,此時就能夠用到#sep標籤了 FreeMarker的代碼

<#assign seasons = ["winter", "spring", "summer", "autumn"]>
<#list seasons as hello>
      ${hello}<#sep>,</#sep>
</#list>
複製代碼

藉助上面的在線測試網址,此時結果就是

image

FreeMarker的#assign使用

#assign在開發裏面常常使用的方式就是定義一個可以被FreeMarker語法識別的變量,基本語法是:<#assign name=value> 使用例子以下: FreeMarker的代碼

<#assign seasons = ["winter", "spring", "summer", "autumn"]>
${seasons[0]}
${seasons[1]}
${seasons[2]}
${seasons[3]}
複製代碼

藉助上面的在線測試網址,此時結果就是

image

FreeMarker的集合使用

獲取list的size

Java代碼:

ArrayList<String> list = new ArrayList<String>();
list.add("Tom");
list.add("Bill");
list.add("Helen");
複製代碼

Freemarker代碼:

<!--返回list的大小爲 3-->
${list?size}
複製代碼
FreeMarker獲得List長度的問題

就好比取得fields的長度的FreeMarker語法是:${fields?size}

<#if fields?size>0 >

</#if>
複製代碼

可是此時報錯了,說不是boolean類型,

Java backtrace for programmers:
----------
freemarker.core.NonBooleanException: Error on line 132, column 22 in viewEntity_js.ftl Expecting a boolean (true/false) expression here Expression fields?size does not evaluate to true/false it is an instance of freemarker.template.SimpleNumber          at freemarker.core.Expression.isTrue(Expression.java:150) 複製代碼

解決方法就是加一個括號

<#if (fields?size>0) >
</#if>
複製代碼

遍歷List

Java代碼:

public class Animal {
    private String name;
    private float price;
    public Animal(String name, float price) {
        this.name = name;
        this.price = price;
    }
    ... getter/setter ...
}
List<Animal> animals = new ArrayList<Animal>();
animals.add(new Animal("snake", 100));
animals.add(new Animal("bird", 120));
animals.add(new Animal("dragon", 999));

複製代碼

Freemarker代碼:

<table>
    <tr>
        <th>名稱</th>
        <th>價格</th>
    </tr>
    <#list animals as being>
        <tr>
            <td>${being.name}<td>
            <td>${being.price}</td>
        </tr>
    </#list>
</table>
複製代碼

遍歷Map

Freemarker代碼:

<#assign seasons = {"hello":"jj"}>
 ${seasons["hello"]}
複製代碼

image

List遍歷中的下標序號

經過list的一個屬性_index來搞定 java代碼

List<String> list = new ArrayList<String>();
list.add("Bill");
list.add("Helen");
複製代碼

Freemarker代碼:

<#list list as a>
    <p>${a_index}</p>
</#list>
複製代碼

取List中第i個元素的值

Java代碼

List<String> list = new ArrayList<String>();
list.add("Bill");
list.add("Helen");
複製代碼

Freemarker代碼

${list[i]}
複製代碼

嵌套時前面要有括號,以下,將字符串變成list,而後取第i個元素的值

Java代碼

String str = "Bill,Helen,Tom";
複製代碼

Freemarker代碼

${(str?split(","))[i]}
複製代碼

List的嵌套

<#list jsskList as jsskVO>
    <#list kcList as kcVO>
        <#if kcVO.kch=jsskVO.kch> (kcVO裏有編號和名稱,而jsskVO裏只有編號)
            ${kcVO.kcm} 
        </#if>
    </#list>
</#list>
複製代碼

FreeMarker裏面的List排序

經過.sort_by()來進行升序

<#list list?sort_by("字段") as x>
    ${x}
</#list>
複製代碼

經過.sort_by()?reverse來進行降序

<#list list?sort_by("字段")?reverse as x> 
    ${x}
</#list>
複製代碼

item_has_next,size使用

<#list userList as user>
    <#if !user_has_next>
        共有${userList?size} 最後一個用戶是:${user.userName}
    </#if>
</#list>
複製代碼

FreeMarker報錯

For "#{...}" content: Expected a number, but this has evaluated to a string (wrapper: f.t.SimpleScalar):

不該該使用 #{…}, 應該要使用 ${…}

Can't compare values of these types. Allowed comparisons are between two numbers, two strings, two dates, or two booleans.

上面的報錯說的是表達式左右兩邊的類型應該一致

相關文章
相關標籤/搜索