FreeMarker中常用的一些标签及语句

首先说一下FreeMarker中的注释为: <#–这里是注释的内容 –>

if语句

<#-- 判断num1等于18就输出 18一枝花! -->
<#if num1==18>18一枝花!</#if>

<#-- 字符串需要加上双引号 -->
<#if user=="小明">欢迎你</#if>

<#--布尔值 -->
<#if b2>b2是true!</#if>  

if else 语句测试:

<#-- 不是使用> 大部分时候,freemarker会把>解释成标签结束(大于可以写 gt )-->

<#if num0 gt 18>  
    及格!
<#else>
    不及格!
</#if>

时间格式化处理

<#-- 将变量datel 时间格式转换成 yyyy-MM-dd HH:mm:ss 格式输出 -->
${date1?string("yyyy-MM-dd HH:mm:ss")}

内建函数:

1. html: 对字符串进行HTML编码;
2. cap_first: 使字符串第一个字母大写;
3. lower_case: 将字符串转成小写;
4. upper_case: 将字符串转成大写;
5. size  获得集合中元素的个数(集合相关常用的内建函数)
6. int: 取得数字的整数部分(数字值相关常用的内建函数)

内建函数的使用:   变量名?内建函数名,  

假设后台传入一个htm2的参数,值为 <b>粗体</b>
root.put("htm2", "<b>粗体</b>");

<#--使用内建函数 html 对字符串(htm2变量)进行HTML编码-->
${htm2?html}

空值处理:

${sss}  <#--这样写 如果${sss} 没有定义这个变量,会报异常! -->

${sss!} <#--这样写 没有定义这个变量,默认值是空字符串! -->

${sss!"abc"}  <#--这样写 没有定义这个变量,默认值是字符串abc! -->

遍历集合

<#-- 遍历 ls , as ys 表示遍历ls时中的每个元素取别名为 ys -->
<#list ls as ys >
    <b> ys </b><br/>
</#list>

取普通变量和对象的值:

<#--user 如果是一个普通变量,可以这样取值-->
${user},

<#--user 如果是一个对象,可以这样取该对象中name属性的值-->
${user.uname}

取List集合中的数据

<#-- lst为一个List集合 根据下标索引取对应得值 -->

${lst[0].city},
${lst[1].city},
${lst[2].city},

include包含

<#--将123.txt包含进来,这可以是包含另一个模板文件或者任何类型的文件-->
<#include "123.txt" />

自定义指令

<#--定义一个指令dtest -->
<#macro dtest>  
    <b>aaa</b>
    <b>bbb</b>
</#macro>

<#--调用上面定义的 dtest宏指令 -->
<@dtest/><@dtest />


<#--定义一个指令dtest2 如下 a b c 为参数 -->
<#macro dtest2 a b c >
    ${a}==${b}==${c}
</#macro>

<#--调用上面定义的 dtest2宏指令,并传人参数 -->
<@dtest2 a="老高" b="老张" c="老马" />


<#--定义一个指令dtest3, <#nested>是获取调用时标签中间传入的内容 -->
<#macro dtest3> 
  <table border=4 cellspacing=0 cellpadding=4>
      <tr>
          <td> 
            <#nested> 
          </td>
      </tr>
  </table> 
</#macro> 

<#--调用上面定义的 dtest3宏指令,标签中间是传入的内容 -->
<@dtest3 >这是要传入的内容!</@dtest3>

测试命名空间及优先级

<#--b.ftl文件内容如下-->
<#macro copyright date>
  <p>Copyright (C) ${date} 测试</p> 
</#macro> 

<#---这里是定义一个mail变量,值为[email protected]  -->
<#assign mail = "123@163.com"> 
<#-- 引入一个b.ftl模板 取别名为bb -->
<#import "b.ftl" as bb  /> 

<#--这里是调用bb模板中的copyright指令 并传入date参数 -->
<@bb.copyright date="2010-2011" />

<#--这里是获取bb模板中的mail变量值 -->
${bb.mail}

<#--在当前模板中又定义一个跟bb模板中一样的变量-->
<#assign mail="[email protected]"  />

<#--这样调用的是当前的模板中的mail变量,会输出[email protected]  -->
${mail}

<!-- 重新设置bb模板中 mail变量的值  -->
<#assign mail="[email protected]" in bb  />

<#--再次获取bb模板中的mail变量值,输入的是修改后的值,为[email protected] -->
${bb.mail}

比 较 运 算

=   (或者==) 判断两个值是否相等;
!=  判断两个值是否不相等;
注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。
而且FreeMarker的比较是精确比较,不会忽略大小写及空格。

 >(或者gt)    大于
>=(或者gte)   大于等于
< (或者lt)    小于
<=(或者lte)   小于等于

注: 上面这些比较运算符可以用于数字和日期,但不能用于字符串。大部分时候,使用gt比>有更好的效果,因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种情况,如:<#if (x>y)>。


逻辑操作:!registered && (firstVisit || fromEurope) 

内建函数:name?upper_case 

方法调用:repeat("What", 3) 

处理不存在的值 
name!  或者  (user.name)!
如不存在默认值:name!"unknown"  或者(user.name)!"unknown" 

检测不存在的值:name?? 或者(user.name)?? 

逻辑运算符

&&  逻辑与
||  逻辑或
!   逻辑非

逻辑运算符只能用于布尔值。

算术运算符

FreeMarker表达式中支持  +  -  *  /  %   运算符

数据类型常见示例

直接指定值 
字符串 : "Foo"或 者'Foo'"It's \"quoted\""r"C:\raw\string" 
数字:123.45 
布尔值:true, false 
序列:["foo", "bar", 123.45] , 1..100 
从序列中检索:products[5] 
哈希表:{"name":"green mouse", "price":150} 
检索变量(如 顶层变量为 user) 
从哈希表中检索数据:user.name, user[“name”] 
特殊变量:.main 
字符串操作 
插值(或连接):"Hello ${user}!"(或"Free" + "Marker") 
获取一个字符:name[0] 
序列操作 
连接:users + ["guest"] 
序列切分:products[10..19]  或  products[5..] 
哈希表操作 
连接:passwords + {"joe":"secret42"} 
算数运算: (x * 1.5 + 10) / 2 - y % 100 


截取子串
截取子串可以根据字符串的索引来进行,
如果指定一个索引值,则取得字符串该索引处的字符;如果指定两个索引值,
则截取两个索引中间的字符串子串。如:
<#assign number="01234">
${number[0]} <#-- 输出字符0 -->
${number[0..3]} <#-- 输出子串“0123” -->
发布了60 篇原创文章 · 获赞 38 · 访问量 27万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章