天天看点

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入门指南

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入门指南

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的三目运算符

FreeMarker的三目运算符的基本语法是:

(true)?string('true', 'false')

使用例子如下:

FreeMarker的代码

<#assign hello = 0>
${(hello == 0)?string('等于0','不等于0')}
<#assign world = 1>
${(world == 0)?string('等于0','不等于0')}
           

借助上面的在线测试网址,此时结果就是

FreeMarker入门指南

FreeMarker的!符号

!和${}配置使用,如果没有变量,那么就添加!符号后面的值为默认值

使用例子如下:

FreeMarker的代码

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

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

借助上面的在线测试网址,此时结果就是

FreeMarker入门指南

FreeMarker的??符号

??的作用是在变量名后面来判断一个变量是否存在

使用例子如下:

FreeMarker的代码

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

借助上面的在线测试网址,此时结果就是

FreeMarker入门指南

FreeMarker的?c符号

?c的作用是把一个整数变成字符串

使用例子如下:

FreeMarker的代码

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

           

借助上面的在线测试网址,此时结果就是

FreeMarker入门指南

上面的代码如果不把整数变成字符串的话,就会报错

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

此时报错如下所示

FreeMarker入门指南

FreeMarker的#sep的使用

在遍历list的时候,我们需要加上,符号的时候,此时就可以用到#sep标签了

FreeMarker的代码

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

借助上面的在线测试网址,此时结果就是

FreeMarker入门指南

FreeMarker的#assign使用

#assign

在开发里面经常使用的方式就是定义一个能够被FreeMarker语法识别的变量,基本语法是:

<#assign name=value>

使用例子如下:

FreeMarker的代码

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

借助上面的在线测试网址,此时结果就是

FreeMarker入门指南

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"]}
           
FreeMarker入门指南

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

继续阅读