Freemarker常用语法简例

本文档提供了Freemarker模板引擎的关键语法示例,包括注释、配置、赋值、逻辑运算、循环处理等核心功能,适用于快速查找和回顾。同时介绍了如何处理变量缺失和NULL值,以及如何包含其他模板。

为使用Freemarker模板时的关键性语法编写代码示例或说明,主要用于回忆性检索或速查,阅读需要一定代码基础或对Freemarker有了解。
常用Freemarker语法简例
常用Freemarker语法简例(二)

注释

<#-- 我是注释 -->

配置

<#-- Use UTF-8 charset for URL escaping from now: -->
<#setting url_escaping_charset="UTF-8">

赋值

<#assign seq = ["foo", "bar", "baz"]>
<#assign  n= 1>
<#assign x++>
<#assign x="Hello ${user}!">

逻辑与比较运算

逻辑运算:|| && !

比较运算 == != > < >= <= gt lt gte lte (g: greater、t: than、e: equal、l: less)
FreeMarker进行的是精确的比较,= 或 != 两边的表达式的结果都必须是标量,而且两个标量都必须是相同类型

实际逻辑:
a > 0  && c < 0  ||  d <=  0 && b >=0
为避免Freemark对 > < 解释为标签可作如下替换
a gt 0 && c lt 0 ||  d lte 0 && b gte 0

if else

if 命令可嵌套使用

<#if condition && condition_1>
  ...
<#elseif condition2>
  ...
<#elseif condition3>
  ...
...
<#else>
   <#if  condition>
    ...
   </#if>
</#if>

循环处理

<#list items as item>
    ${item?index} 从0开始的索引
    ${item?counter}  从1开始的索引
    ${item?is_first} 是否为第一项
    ${item?is_last} 是否为最后一项
    ${item?is_even_item} 索引根据0计算,是否为奇数,1、3、5...
    ${item?is_odd_item} 索引根据0计算,是否为偶数,0、2、4
    ${item?has_next} 当前项后面是否为最后一项,与 is_last 结果相反
<#list>

NULL/不存在变量(变量丢失)

FreeMarker 绝不能容忍引用不存在的变量, 除非明确地告诉它当变量不存在时如何处理。
一个不存在的变量和一个是 null 值的变量, 对于FreeMarker来说是一样的,所以这里所指的"丢失"包含这两种情况。

通过!默认值 在变量不存在(或为null)时,返回默认值

user不存在时,值为 visitor
<h1>Welcome ${user!"visitor"}!</h1>

info 不存在 或者 gender 属性不存在 或者 name 属性不存在
使用()可处理多层级结构的情况
<span>gender is : ${(info.gender.name)!"man"}!</span>

通过??判定变量不存在,需要与 if 合并使用

user不存在时,
<#if user??><h1>Welcome ${user}!</h1></#if>

info 不存在 或者 gender 属性不存在 或者 name 属性不存在
使用()可处理多层级结构的情况
<#if (info.gender.name)??><span>gender is : ${(info.gender.name)!"man"}!</span><#if>

include组合其他模板或页面

<#include "/common/copyright.ftl">
匹配 common/copyright.ftl

<#include "/common/*/copyright.ftl">
模糊匹配
匹配 common/任意/中间/目录/copyright.ftl
Freemarker 是一款模板引擎,以下是其常用语法介绍: ### 变量赋值 使用 `#assign` 指令进行变量赋值,用法有多种,包含创建或替换一个顶层变量,或者创建或替换多个变量等。示代码如下: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>FreeMarker3</title> </head> <body> <h2>Test:${name}</h2> <#assign name=publicUtil.getname(1)> <!-- 后续可使用 name 变量 --> </body> </html> ``` ### 条件判断 使用 `#if`、`#elseif` 和 `#else` 进行条件判断。示如下: ```html <#if name=='北'> 北大学的编号 <#elseif name=='清'> 清大学编号 <#else> 哈工大编号 </#if> ``` 也可对集合长度进行判断: ```html <#if list?? && (list?size >= 3)> list集合长度大于或者等于三 <#else> list集合长度小于三条 </#if> ``` ### 循环操作 对列表进行循环操作,可使用 `#list` 指令。如将所有需要在一个区域显示的数据全部添加到一个叫做 `zbj` 的列表中,然后进行循环: ```html <#if zbj?exists> <#list 0..zbj?size - 1 as a1> <#if a1 % (4 * ldList?size) == 0> <tr> </#if> <td height="23"> <input type="text" size="7" id="input1" value=${a2[a1]} name="alldata"/> </td> </#list> </#if> ``` 对于字符串按照某个字符分割后遍历展示也可使用 `#list`: ```html <#list ckworks.tags?split(",") as tag> <a href="javascript:;">${tag}</a> </#list> ``` ### 类型处理 #### 日期类型处理 - 常用格式:`${date?date}`、`${date?time}`、`${date?datetime}` - 自定义格式:`${date?string("yyyy/MM/dd HH:mm:ss")}`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值