文章首發於個人我的博客,到我的博客體驗更佳閱讀哦html
介紹一個FreeMarker的在線測試的好工具:www.itqiankun.com/utils?type=…spring
FreeMarker官網地址 freemarker.apache.orgexpress
一張圖就搞定了,配置好以後,在重啓就行了apache
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>
複製代碼
藉助上面的在線測試網址,此時結果就是學習
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>
複製代碼
藉助上面的在線測試網址,此時結果就是
FreeMarker的三目運算符的基本語法是:(true)?string('true', 'false')
使用例子以下: FreeMarker的代碼
<#assign hello = 0>
${(hello == 0)?string('等於0','不等於0')}
<#assign world = 1>
${(world == 0)?string('等於0','不等於0')}
複製代碼
藉助上面的在線測試網址,此時結果就是
!和${}配置使用,若是沒有變量,那麼就添加!符號後面的值爲默認值 使用例子以下: FreeMarker的代碼
<#assign user = "itqiankun.com">
<h1>Welcome ${user!"Anonymous"}!</h1>
<#assign user = "itqiankun.com">
<h1>Welcome ${hello!"Anonymous"}!</h1>
複製代碼
藉助上面的在線測試網址,此時結果就是
??的做用是在變量名後面來判斷一個變量是否存在 使用例子以下: FreeMarker的代碼
<#assign cc = "itqiankun.com">
<#if cc??><h1>Welcome ${cc}</h1></#if>
<#if ss??><h1>Welcome ${ss}</h1><#else>no_one</#if>
複製代碼
藉助上面的在線測試網址,此時結果就是
?c的做用是把一個整數變成字符串 使用例子以下: FreeMarker的代碼
<#assign hello=22/>
<#assign seasons = {"22":"jj"}>
${seasons[hello?c]}
複製代碼
藉助上面的在線測試網址,此時結果就是
上面的代碼若是不把整數變成字符串的話,就會報錯<#assign hello=22/>
<#assign seasons = {"22":"jj"}>
${seasons[hello]}
複製代碼
此時報錯以下所示
在遍歷list的時候,咱們須要加上,符號的時候,此時就能夠用到#sep標籤了 FreeMarker的代碼
<#assign seasons = ["winter", "spring", "summer", "autumn"]>
<#list seasons as hello>
${hello}<#sep>,</#sep>
</#list>
複製代碼
藉助上面的在線測試網址,此時結果就是
#assign
在開發裏面常常使用的方式就是定義一個可以被FreeMarker語法識別的變量,基本語法是:<#assign name=value>
使用例子以下: FreeMarker的代碼
<#assign seasons = ["winter", "spring", "summer", "autumn"]>
${seasons[0]}
${seasons[1]}
${seasons[2]}
${seasons[3]}
複製代碼
藉助上面的在線測試網址,此時結果就是
Java代碼:
ArrayList<String> list = new ArrayList<String>();
list.add("Tom");
list.add("Bill");
list.add("Helen");
複製代碼
Freemarker代碼:
<!--返回list的大小爲 3-->
${list?size}
複製代碼
就好比取得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>
複製代碼
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>
複製代碼
Freemarker代碼:
<#assign seasons = {"hello":"jj"}>
${seasons["hello"]}
複製代碼
經過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>
複製代碼
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 jsskList as jsskVO>
<#list kcList as kcVO>
<#if kcVO.kch=jsskVO.kch> (kcVO裏有編號和名稱,而jsskVO裏只有編號)
${kcVO.kcm}
</#if>
</#list>
</#list>
複製代碼
經過.sort_by()
來進行升序
<#list list?sort_by("字段") as x>
${x}
</#list>
複製代碼
經過.sort_by()?reverse
來進行降序
<#list list?sort_by("字段")?reverse as x>
${x}
</#list>
複製代碼
<#list userList as user>
<#if !user_has_next>
共有${userList?size} 最後一個用戶是:${user.userName}
</#if>
</#list>
複製代碼
不該該使用 #{…}, 應該要使用 ${…}
上面的報錯說的是表達式左右兩邊的類型
應該一致