FreeMarker学习记录

FreeMarker:

模板使用的所有数据被包装成data-model数据模型

模板+数据模型=输出

仅存储单值的变量称为scalar标量。${var}

hash哈希表

sequence序列:按顺序存储子序列。可以使用数字索引访问子变量

标量类型:字符串,数字,日期/时间,布尔值

${...}   interpolations插值

<#></#>  FTL tag标签

<#-- --> 注释Comments

directives指令:就是所指的FTL标签

------------------------------------------------------
directives指令
if指令:
<#if condition> ... </#if> 数字不可放在引号中
<#if condition> ... <#elseif condition> ... <#else>  </#if>
关系运算符:== != < >....

list指令:
<#list sequence as loopVariable>repeatThis</#list>

<#list animals as being>
<tr><td>${being.name}<td>${being.price} Euros
</#list>

注意:sequence不需要用${}包含

include指令:
在当前的模板中插入其他文件的内容
<#include "/copyright_footer.html">
注意:include指令不是以/>结束的。

null变量处理
FreeMarker不能引用不存在的变量
2种处理方式:
1. ${var!default}:若var不存在或为null则显示default的值
2. <#if user??> ${user} </#if> ??询问FreeMarker变量是否存在,与if合并,如果不存在则忽略if内容

注意:a.b.c!0:只有在a.b存在c不存在的情况下才显示0,如果a或b不存在则报错使用(a.b.c)!0 .
   ??同上
------------------------------------------------------
支持的类型有:
  标量:
   字符串
   数字
   布尔值
   日期
  容器:
   哈希表
   序列
   集
  子程序:
   方法和函数
   用户自定义指令
  其它/很少使用:
   节点
------------------------------------------------------------------------
快速浏览(备忘单)
这里是给已经了解 FreeMarker 的人或有经验的程序员的一个提醒:
  直接指定值
  字符串: "Foo"  或者   'Foo'  或者   "It's  \"quoted\""  或者
   r"C:\raw\string"
  数字:123.45
  布尔值:true, false
  序列:["foo", "bar", 123.45], 1..100
  哈希表:{"name":"green mouse", "price":150}
  检索变量
  顶层变量:user
  从哈希表中检索数据:user.name,  user[“name”]
  从序列中检索:products[5]
  特殊变量:.main
  字符串操作
  插值(或连接):"Hello ${user}!"(或"Free" + "Marker")
  获取一个字符:name[0]
  序列操作
  连接:users + ["guest"]
  序列切分:products[10..19]  或  products[5..]
  哈希表操作
  连接:passwords + {"joe":"secret42"}
  算数运算: (x * 1.5 + 10) / 2 - y % 100
  比较 运算 : x == y,  x != y,  x < y,  x > y,  x >= y,  x <= y,
x &lt; y,  等等
  逻辑操作:!registered && (firstVisit || fromEurope)
  内建函数:name?upper_case
  方法调用:repeat("What", 3)
  处理不存在的值
  默认值:name!"unknown"  或者(user.name)!"unknown"  或者
name!  或者  (user.name)!
  检测不存在的值:name??  或者(user.name)??


注意:
 3/2 = 1.5 不是1
 FTL 是区分大小写的。list 是指令的名称而 List 就不是,类似地${name}和
${Name}或者${NAME}它们也是不同的。
 去除“\”的影响:r"C:\raw\string"
 2..5 和[2, 3, 4, 5]是相同的:<#list 2..5 as x>${x} </#list>
 哈希表:检索的名字就必须是字符串类

---------------------------------------------------------------------
字符串,序列,哈希表都支持连接操作
${"Hello ${user}!"} == ${"Hello " + user + "!"}
<#list users + admins as person>
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>

序列切分
使用 [firstindex..lastindex] 可 以 获 取 序 列 中的一部分 ,这里的
firstindex 和 lastindex 表达式的结果是数字。 如果seq 存储序列"a", "b", "c",
"d", "e", "f",那么表达式 seq[1..4]将会是含有"b", "c",  "d", "e"的序列(索
引为 1 的项是"b",索引为 4 的项是"e")。
lastindex 可以被省略,那么这样将会读取到序列的末尾。如果 seq 存储序列"a",
"b",  "c", "d",  "e", "f",那么 seq[3..]将是含有"d", "e",  "f"的序列。

注意:
比较时:使用>=和>的时候有一点小问题,将表达式放到括号内:<#if (x > y)>
  可以使用 lt 代替<,lte代替<=, gt 代替>, gte 代替>=
-------------------------------------------------------------------------
内建函数
内建函数以?形式提供变量的不同形式
 字符串使用的内建函数:
   html:  字符串中所有的特殊 HTML 字符都需要用实体引用来代替(比如<代
 替&lt;) 。
   cap_first:字符串的第一个字母变为大写形式
   lower_case:字符串的小写形式
   upper_case:字符串的大写形式
   trim:去掉字符串首尾的空格
  序列使用的内建函数:
   size:序列中元素的个数
  数字使用的内建函数:
   int:数字的整数部分(比如-1.9?int 就是-1)
${test?upper_case?html} :内嵌函数双重使用
---------------------------------------------------------------------
宏命令
定义
<#macro greet person>
 <font size="+2">Hello ${person} !</font>
</#macro>
使用
<@greet person="Fred"/> and <@greet person="Batman"/>
输出
<font size="+2">Hello Fred!</font>
and <font size="+2">Hello Batman!</font>

嵌套内容
定义
<#macro border>
 <table border=4 cellspacing=0 cellpadding=4><tr><td>
 <#nested>
 </td></tr></table>
</#macro>
使用
<@border>The bordered text</@border>
输出
<table border=4 cellspacing=0 cellpadding=4><tr><td>
 The bordered text
</td></tr></table>

循环变量
<#macro do_thrice>
 <#nested 1>
 <#nested 2>
 <#nested 3>
</#macro>
使用
<@do_thrice ; x> <#--   用户自定义指令  使用";"代替"as" -->
 ${x} Anything.
</@do_thrice>
输出
1 Anything
2 Anything
3 Anything

---------------------------------------------------------------------
在模板中可以定义三种类型的变量:
  简单变量:
 它能从模板中的任何位置来访问,或者从使用 include 指令引入的模板访问。
 可以使用 assign 或 macro 指令来创建或替换这些变量。
  局部变量:
 它们只能被设置在宏定义体内,而且只在宏内可见。一个局部变量的生存周期
 只是宏的调用过程。可以使用 local 指令在宏定义体内创建或替换局部变量。
  循环变量:
 循环变量是由指令(如 list)自动创建的,而且它们只在指令的开始和结束标
 记内有效。宏的参数是局部变量而不是循环变量
注意:
 局部变量会隐藏(不是覆盖)同名的简单变量。
 循环变量会隐藏(不是覆盖)同名的局部变量和简单变量

命名空间
 <#import "/lib/my_test.ftl" as my >
 <#--  被称为"my"的哈希表就会是那个" 大门"  -->
 <@my.copyright date="1999-2002"/>
 ${my.mail}


<#function avg x y>
 <#return (x + y) / 2>
</#function>
${avg(10, 20)}

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值