文章首发于我的个人博客,到个人博客体验更佳阅读哦
https://www.itqiankun.com/article/1571311523
FreeMarker帮助学习网址
首先给大家介绍一个FreeMarker的在线测试的好工具:
https://www.itqiankun.com/utils?type=online_freemarker_test
FreeMarker官网地址
:https://freemarker.apache.org/
Idea配置FreeMarker
一张图就搞定了(
看不清的话,点击一下图片就清晰了哦
),配置好之后,在重启就好了
FreeMarker的switch用法
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
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的三目运算符
FreeMarker的三目运算符的基本语法是:
(true)?string('true', 'false')
使用例子如下:
FreeMarker的代码
<#assign hello = 0>
${(hello == 0)?string('等于0','不等于0')}
<#assign world = 1>
${(world == 0)?string('等于0','不等于0')}
借助上面的在线测试网址,此时结果就是
FreeMarker的!符号
!和${}配置使用,如果没有变量,那么就添加!符号后面的值为默认值
使用例子如下:
FreeMarker的代码
<#assign user = "itqiankun.com">
<h1>Welcome ${user!"Anonymous"}!</h1>
<#assign user = "itqiankun.com">
<h1>Welcome ${hello!"Anonymous"}!</h1>
借助上面的在线测试网址,此时结果就是
FreeMarker的??符号
??的作用是在变量名后面来判断一个变量是否存在
使用例子如下:
FreeMarker的代码
<#assign cc = "itqiankun.com">
<#if cc??><h1>Welcome ${cc}</h1></#if>
<#if ss??><h1>Welcome ${ss}</h1><#else>no_one</#if>
借助上面的在线测试网址,此时结果就是
FreeMarker的?c符号
?c的作用是把一个整数变成字符串
使用例子如下:
FreeMarker的代码
<#assign hello=22/>
<#assign seasons = {"22":"jj"}>
${seasons[hello?c]}
借助上面的在线测试网址,此时结果就是
上面的代码如果不把整数变成字符串的话,就会报错
<#assign hello=22/>
<#assign seasons = {"22":"jj"}>
${seasons[hello]}
此时报错如下所示
FreeMarker的#sep的使用
在遍历list的时候,我们需要加上,符号的时候,此时就可以用到#sep标签了
FreeMarker的代码
<#assign seasons = ["winter", "spring", "summer", "autumn"]>
<#list seasons as hello>
${hello}<#sep>,</#sep>
</#list>
借助上面的在线测试网址,此时结果就是
FreeMarker的#assign使用
#assign
在开发里面经常使用的方式就是定义一个能够被FreeMarker语法识别的变量,基本语法是:
<#assign name=value>
使用例子如下:
FreeMarker的代码
<#assign seasons = ["winter", "spring", "summer", "autumn"]>
${seasons[0]}
${seasons[1]}
${seasons[2]}
${seasons[3]}
借助上面的在线测试网址,此时结果就是
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"]}
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]}
FreeMarker里面的List排序
通过
.sort_by()
来进行升序
<#list list?sort_by("字段") as x>
${x}
</#list>
通过
.sort_by()?reverse
来进行降序
<#list list?sort_by("字段")?reverse as x>
${x}
</#list>
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
上面的报错说的是
表达式左右两边的类型
应该一致
暂时就学到这些,以后遇到在进行补充吧
大佬网址:https://www.itqiankun.com/article/1571311523