FreeMarker入门指南

文章首发于我的个人博客,到个人博客体验更佳阅读哦

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值