$("#").html(ftl) js 动态引入宏定义,freemarker语法二

freemarker语法2

最常用的概念

1、 scalars:存储单值

字符串:简单文本由单或双引号括起来。

数字:直接使用数值。

日期:通常从数据模型获得

布尔值:true或false,通常在标记中使用

2、 hashes:充当其它对象的容器,每个都关联一个唯一的查询名字

具有一个唯一的查询名字和他包含的每个变量相关联。

3、 sequences:充当其它对象的容器,按次序访问

使用数字和他包含的每个变量相关联。索引值从0开始。

4、 集合变量:

除了无法访问它的大小和不能使用索引来获得它的子变量:集合可以看作只能由指令使用的受限sequences。

5、 方法:通过传递的参数进行计算,以新对象返回结果

方法变量通常是基于给出的参数计算值在数据模型中定义。

6、 用户自定义FTL指令:宏和变换器

7、 节点

节点变量表示为树型结构中的一个节点,通常在XML处理中使用。

在模板里对sequences和hashes初始化

sequences

1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ]     hashes      {“you”:”a”,”me”:”b”,”he”:”c”}

注释标志

这里是注释

-->

旧版本的freemarker采用的是 注释 #comment>方法

sequences内置方法

sequence?first

返回sequence的第一个值;前提条件sequence不能是null

sequence?last

返回sequence最后一个值

sequence?reverse

反转sequence的值

sequence?size

返回sequence的大小

sequence?sort

对sequence按里面的对象toString()的结果进行排序

sequence?sort_by(value)

对sequence 按里面的对象的属性value进行排序

如: sequence里面放入的是10 个user对象,user对象里面包含name,age等属性

sequence?sort_by(name) 表示所有的user按user.name进行排序

hashes内置方法

hash?keys

返回hash里的所有keys, 返回结果类型sequence

hash?values

返回hash里的所有value, 返回结果类型sequence

模板

使用FTL(freeMarker模板语言)编写

组成部分

一、整体结构

1、注释:,不会输出。

2、文本:直接输出。

3、interpolation:由 ${var} 或 #{var} 限定,由计算值代替输出。

4、FTL标记

二.表达式

1、直接指定值:

1-1、字符串:

由双引号或单引号括起来的字符串,其中的特殊字符(如' " \等)需要转义。

1-2、raw字符串:

有一种特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子:

${r"/${data}"year""}屏幕输出结果为:/${data}"year"

转义    含义

序列

\"  双引号(u0022)

\'  单引号(u0027)

\\  反斜杠(u005C)

\n  换行(u000A)

\r  Return (u000D)

\t  Tab (u0009)

\b  Backspace (u0008)

\f  Form feed (u000C)

\l  <

\g  >

\a  &

\{  {

\xCode  4位16进制Unicode代码

1-3、数字:直接输入,不需要引号

1)、精度数字使用“.”分隔,不能使用分组符号

2)、目前版本不支持科学计数法,所以“1E3”是错误的

3)、不能省略小数点前面的0,所以“.5”是错误的

4)、数字8、+8、08和8.00都是相同的

1-4、布尔值:true和false,不使用引号

1-5、序列:由逗号分隔的子变量列表,由[]方括号限定。

1)、子变量列表可以是表达式

2)、可以使用数字范围定义数字序列,不需要方括号限定,例如2..5等同于[2, 3, 4, 5],但是更有效率,可以定义反递增范围如:5..2。

1-6、散列(hash)

1)、由逗号分隔的键/值列表,由{}大括号限定,键和值之间用冒号分隔,如:{"key1":valu1,"key2":"character string"....}

2)、键和值都是表达式,但是键必须是字符串。

2、获取变量:

2-1、顶层变量:${变量名}

变量名只能是字母、数字、下划线、$、#、@ 的组合,且不能以数字开头。

2-2、散列:有两种方法

1)、点语法:变量名字和顶层变量的名字受同样的限制

2)、方括号语法:变量名字无限制,可以是任意的表达式的结果

book.author.name

book.author.["name"]

book["author"].name

book["author"]["name"]

以上是等价的。

2-3、序列:使用散列的方括号语法获取变量,方括号中的表达式结果必须为数字。注意:第一个项目的索引为0。可以使用

[startindex..endindex]语法获取序列片段。

2-4、特殊变量:FreeMarker内定义变量,使用.variablename语法访问。

3、字符串操作

3-1、interpolation:使用${}或#{}在文本部分插入表达式的值,例如:

${"hello${username}!"}

${"${username}${username}${username}"}

也可以使用+来获得同样的结果:

${"hello"+username+"!"}

${username+username+username}

注意:${}只能用于文本部分而不能出现于标记内。

或都是错误的;

是正确的。

本例中user.login的值必须是布尔类型。

3-2、子串:

举例说明:假如user的值为"Big Joe"

${user[0]}${user[4]}结果是:BJ

${user[1..4]}结果是:ig J

4、序列操作

4-1、连接操作:可以使用+来操作,例如:

["title","author"]+["month","day"]

5、散列操作

5-1、连接操作:可以使用+来操作,如果有相同的KEY,则右边的值会替代左边的值,例如:

{"title":散列,"author":"emma"}+{"month":5,"day":5}+{"month":6}结果month的值就是6。

6、算术运算

6-1、操作符:+、-、*、/、%

除+号以外的其他操作符两边的数据,必须都是数字类型。

如果+号操作符一边有一个字符型数据,会自动将另一边的数据转换为字符型数据,运算结果为字符型数据。

6-2、比较操作符:

1}、=

2}、==

3}、!=

4}、<

5}、<=

6}、>

7}、>=

1-3的操作符,两边的数据类型必须相同,否则会产生错误

4-7的操作符,对于日期和数字可以使用,字符串不可以使用。

注意:

1}、FreeMarker是精确比较,所以"x" "x " "X"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值