文章首发于我的个人博客,到个人博客体验更佳阅读哦
https://www.itqiankun.com/article/1571311523
首先给大家介绍一个FreeMarker的在线测试的好工具:
https://www.itqiankun.com/utils?type=online_freemarker_test
FreeMarker官网地址
:https://freemarker.apache.org/
一张图就搞定了(看不清的话,点击一下图片就清晰了哦
),配置好之后,在重启就好了
FreeMarker的switch的基本语法是:
<#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的代码
<#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?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]}
通过.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>
不应该使用 #{…}, 应该要使用 ${…}
上面的报错说的是表达式左右两边的类型
应该一致
暂时就学到这些,以后遇到在进行补充吧
大佬网址:https://www.itqiankun.com/article/1571311523