freemarker中文官网 (前端使用freemarker入门教程)

Idea配置FreeMarker

一张图就搞定了,配置好之后,在重启就好了

freemarker内容,前端使用freemarker入门教程

FreeMarker的switch用法

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

<#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入门教程

FreeMarker的#if,#elseif,#else

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

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

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的!符号

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

使用例子如下:

FreeMarker的代码

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

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

freemarker内容,前端使用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入门教程

FreeMarker的#assign使用

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

使用例子如下:

FreeMarker的代码

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

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

freemarker内容,前端使用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

Java代码:

Map<String,Object> myMap = new HashMap<String,Object>();
myMap.put("title", "Map Featch");
myMap.put("version", "v1.2.0");

Freemarker代码:

<select>
 <#list map?keys as k>
 <option value="${k}"> ${map[k]} </option>
 </#list>
</select>

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]}

嵌套时前面要有括号,如下,将字符串变成list,然后取第i个元素的值

Java代码

String str = "Bill,Helen,Tom";

Freemarker代码

${(str?split(","))[i]}

List的嵌套

<#list jsskList as jsskVO>
 <#list kcList as kcVO>
 <#if kcVO.kch=jsskVO.kch> (kcVO里有编号和名称,而jsskVO里只有编号)
 ${kcVO.kcm} 
 </#if>
 </#list>
</#list>

FreeMarker里面的List排序

通过.sort_by()来进行升序

<#list list?sort_by("字段") as x>
 ${x}
</#list>

通过.sort_by()?reverse来进行降序

<#list list?sort_by("字段")?reverse as x> 
 ${x}
</#list>