Freemaker基础操作

1、if指令

//第一种用法
[#if 条件]
...
[/#if]
//第二种用法
 [#if 条件]
 ...
 [#else]
 ...
[/#if]
 //第三种用法
  [#if 条件]
  ...
 [#elseif 条件]
 ...
 [#else]
 ...
[/#if]
//判断包含
<#if "a,b,c,"?contains("a")>
      checked
    </#if>
//如果需要判断对象不为空:
<#if name??>
   ……
</#if>
//当对象有属性时,对象及对象属性都有可能为空,可写成:
<#if (user.name)??>//判断对象属性不为空
    ……
</#if>
//判断List是不为空
<#if userList?? && (userList?size > 0) > 
    <h1>List不为空</h1>
    <#list userList as uInfo>
    ……
<#else> 
    <h1>显示</h1>
</#if>
//判断Map是否为空
//用freemarker取出map值后,判断该值是否等于某一字符串,可以使用内建函数 ?string 来进行判断。
//实际代码:
//Data 是一个Record对象【JFinal的,其实可以理解为一个Map】。
//Data.get(key)根据map的key取出value对应的值。

<#list datas as Data>
    <Condition>
        <#list Data.getColumnNames() as key> 
            <${key}>
            <#if Data.get(key)?exists>
                <#if Data.get(key)?string !="null">${Data.get(key)}</#if>
            </#if>
            </${key}> 
        </#list>
   </Condition>
</#list>

2、list指令

//第一种用法
[#list animals as animal] 
  ...
[/#list]

//第二种用法
[#list animals] 
 //如果集合为空则不进list
 ...
  [#items as animal] 
  //循环体
  ...
  [/#items] 
[/#list]

//第三种用法
[#list animals as animal] 
    $ {animal}
     [#sep]//表示还有下一个实体时,执行显示,号[/#sep]
[/#list]
//第四种用法
[#list animals  as animal]
  ${animal}
  [#sep],[/#sep]
  [#else]//如果list元素为空则执行else
   None
[/#list]

//第五种用法
[#list animals  ]
  ...
  [#items as animal]
    ${animal}[#sep] ...[/#sep]
  [/#items]
[#else]
...
[/#list]

3、include指令
使用该include指令,您可以将另一个文件的内容插入到模板中。

 [#include "/copyright_footer.html"]

4、使用内置插件
FreeMarker使用?启动调用内置插件

  ${user?upper_case} //字符串大写
  ${user?cap_first} //首字母大写
  ${user?length} //字符串长度
  ${animal.protected?string("Y", "N")} //返回字符串“Y”或“N”,具体取决于布尔值animal.protected
  ${user?starts_with("J")} //第一个字母是否是J
  ${1.1?int} //取整
  //list 相关用法
  ${animals?size} //list大小
  ${fruits?join(", ")} //通过连接项目,并在每个项目之间插入参数分隔符(如“orange,banana”)将列表转换为字符串
  [#list animals as animal]
  	${animal?index}   //索引0开始
  	${animal?counter} //索引1开始
  	${animal?item_parity} //根据当前的计数器奇偶校验,给出字符串“奇数”或“偶数”。这通常用于着色具有交替颜色的行
  [/#list]

内置插件是可以连接一起使用,例如:

${fruits?join(", ")?upper_case}
${1.1?int} //取整

5、处理缺失的变量
所谓缺失值的意思是:在FreeMarker的模型中不存在的变量,处理方式有两种:

设置默认值,关键符 !
u s e r ! " v i s i t o r " / / 如 果 u s e r 变 量 不 存 在 则 值 就 是 v i s i t o r , 否 则 就 是 {user! "visitor" } //如果user变量不存在则值就是visitor,否则就是 user!"visitor"//uservisitor{user}

备注:如果给一个对象的某个属性设置默认值应该 ${(user.name)!""},如果不加括号,那么如果user也是缺失值,那么FreeMarker会报错。

使用if判断是否是缺失变量,关键符号两个文号 ??

[#if user??]
   //user变量存在
[/#if]

6、“. .”操作符
“…”用来表示一个范围,通常用于截取字符串和序列

start..end                       包含开始和结束。例:0..5  相当于[0,5]
start..<end 和  start..!end      包含开始但不包含结束。例: 0..<5  相当于[0,)
start..*length                   长度限制范围。例: 1..*5  相当于 1 2 3 4 5
start..                          右无界范围。这就像长度有限的范围,长度无限。例如,1.. 相当于 [1, 2, 3, 4, 5, 6, ... ]无限

“. .”操作符并不真正存储它们所包含的数字,因此例如0. .1并且 0. .100000000速度相同,占用的内存也相同。
该操作符可用于字符串操作和序列操作。例如:

字符串操作

//比如name=“freemarker”
${name[0..5]}   //freema   截取前6个字符
${name[0..<5]}  //freem    截取前5个字符
${name[0..*5]}  //freem     截取前5个字符
${name[5..]}    //arker       截取第6个字符及以后的字符
序列操作
[#list animals[0..5] as animal]  ${animal.name} [/#list]     //只循环前序列的前6个对象
[#list animals[0..<5] as animal]  ${animal.name} [/#list]    //只循环前序列的前5个对象
[#list animals[0..*5] as animal]  ${animal.name} [/#list]    //只循环前序列的前5个对象
[#list animals[5..] as animal]  ${animal.name} [/#list]      //只循环前序列的第6个及以后的对象
[#list animals[10..5] as animal]  ${animal.name} [/#list]    //循环下标为10到5的倒序,这种方法可以让序列倒序
[#list 0..10 as num]  ${num} [/#list]                        //0~10的循环

7、r转义
如果你想直接在页面上显示“${name}”字符串就得使用r进行转义。例如

${r"${name}"}  //直接输出${name}

8、assign关键字
assign用于自定义变量
例如:

**定义一个字符串变量**
[#assign name="freemarker"]                  //定义一个字符串
[#assign name="Hello ${user} !"]             
[#assign name="free" + “marker”]             //两个字符串拼接

定义一个序列

<#assign seq1 = ["abc""bcd""cde"]>         //定义一个序列
<#assign seq2 =  seq1 + ["efg"]>              //两个序列拼接
<#assign seq3 =  ["a"["b","c"]"d"]>           //可以序列中可以包含任意类型

定义一个Hash

<#assign ages = {"Joe"23"Fred"”:25}>
<#assign ages = {"Joe"23"Fred"25} + {"Joe"30"Fred"18}>

定义一个number变量

<#assign num = 25>
<#assign num = 25 + 10 * 12>    //可以进行各种算数运算

读取布尔类型

${isAct?string ("true","false")}

**

substring(start,end)从一个字符串中截取子串

**
start:截取子串开始的索引,start必须大于等于0,小于等于end
end: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。
例子:

${‘str’?substring(0)}à结果为str
${‘str’?substring(1)}à结果为tr
${‘str’?substring(2)}à结果为r
${‘str’?substring(3)}à结果为
${‘str’?substring(0,0)}à结果为
${‘str’?substring(0,1)}à结果为s
${‘str’?substring(0,2)}à结果为st
${‘str’?substring(0,3)}à结果为str

2、cap_first 将字符串中的第一个单词的首字母变为大写。

${‘str’?cap_first}à结果为Str

3、uncap_first将字符串中的第一个单词的首字母变为小写。

${Str’?cap_first}à结果为str

4、 capitalize将字符串中的所有单词的首字母变为大写

${‘str’? capitalize}à结果为STR

5、 date,time,datetime将字符串转换为日期

6、ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。
${“string”?ends_with(“ing”)?string} 返回结果为true
注意:布尔值必须转换为字符串才能输出

7、html 用于将字符串中的<、>、&和“替换为对应得<>&quot:&

8、index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。
Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。
如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为0。

${“string”?index_of(“in”) à结果为3
${“string”?index_of(“ab”) à结果为-1

9、length返回字符串的长度 ${“string”?length}à结果为6

10、lower_case将字符串转为小写

${“STRING”?lower_case}à结果为string

11、upper_case将字符串转为大写

${“string”?upper_case}à结果为STRING

12、contains 判断字符中是否包含某个子串。返回布尔值

${“string”?contains(“ing”)?string} à结果为true

注意:布尔值必须转换为字符串才能输出

13、number将字符串转换为数字

${111.11?number}à结果为111.11

14、replace用于将字符串中的一部分从左到右替换为另外的字符串。

${“strabg”?replace(“ab”,”in”)} à结果为string

15、split使用指定的分隔符将一个字符串拆分为一组字符串

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值