freemarker-模版语法

freemarker模版语法

2.freemarker的内容
  1)FTL标签(用于FreeMarker模板语言标签):FTL标签的名称以 #。(用户定义的FTL标签使用@ 不是#)
  2)注释 <#-- --> 与HTML注释不同,FTL注释不会输入到输出中(访问者的页面源将不会显示),因为FreeMarker会跳过它们。
  任何不是FTL标签或插值或注释的东西都被视为静态文本,不会被FreeMarker解释; 它只是原样打印到输出。

3.基本的指令
3-1.if指令
    <#if 1+1<2>
      真的么
    <#elseif 1+1==2>
      好像吧
    <#else>
      不知道
    </#if>

3-2.列表指令
    1)循环显示 list中的内容
        <#list animals as animal> 
            <tr> <td> $ { animal .name} <td> $ { animal .price}欧元
        </#list>
    
    2)list为空的话 不显示  list不为空的话 用items循环显示
        <#list misc.fruits>
          <ul>
            <#items as fruit>
              <li> $ {fruit}
            </#items>
          </ ul>
        </#list>
    
    3)#sep在显示一些分隔符的时候会非常有用 
      #sep将仅在下一个项目执行时执行。因此,在最后的水果之后没有逗号。
        <p>水果:<#list misc.fruits as fruit> $ {fruit} <#sep>,</#sep> </#list>
    
    4)list else /list 当list中没有数据时 显示的内容
        <#list misc.fruits>
          水果:
          <ul>
            <#items as fruit>
              <li> $ {fruit} <#sep>和</#sep>
            </#items>
          </ ul>
        <#else>
          我们没有水果。
        </#list>
    
3-3.include指令
使用该include指令,您可以将另一个文件的内容插入到模板中
<#include“/copyright_footer.html”>

3-4.处理缺失的变量
1)如果变量未取到 用!后指定的值做默认值
    <h1>欢迎$ {user!"missing"}!</ h1>
2)变量名?? 询问变量是否存在 如果变量存在显示true 
    <#if user??> <h1>欢迎$ {user}!</ h1> </#if>

3-5.常用内置函数
user?upper_case 转化为大写
user?cap_first 首字母大写
user?length 获取字符串长度
list?size 获取list的数据数量
bool?string("Y", "N") 根据布尔值返回字符串
list?join(", ")用指定字符连接数组
user?starts_with("J") 字符串以XXX开头 是返回true 否返回false
user?html
num?int取整数部分

在list标签中也可使用以下内置函数 
  list?index 从0开始获取数据行数
  list?counter 类似index从1开始计数
  list?item_parity 返回"odd" "even" 表示奇偶数
  list?item_cycle('lightRow', 'darkRow') 类似item_parity 返回指定字符串

4,转义
freemark使用"\"来进行转义 也可以在字符串前加"r"来表示转义
${r"C:\foo\bar"}

5.数组声明 
freemark的语法与js很像
<#list ["aa","bb",33] as vaaq>
${vaaq}
</#list>

范围截取 
<#assign aa = "012345"/>
${aa[2..5]}指定结束下标
${aa[2..<6]}指定结束下标小于几
${aa[2..*4]}指定个数

通过"+"可以何并集合
<#assign s1 = ["11","22"]/>
<#assign s2 = ["22","33"]/>
${(s1+s2)?join(",")}
通过"+"可以何并对象 如果有重复值 之后的值将覆盖之间的值
<#assign ages = {"aa":20,"bb":30} + {"bb":40,"cc":50}>
${ages.aa}
${ages.bb}//40
${ages.cc}

6.变量的命名规范
在这种表达式中,变量名只能包含字母(包括非拉丁字母),数字(包括非拉丁数字),下划线(_),美元($),在符号(@)
第一个字符不能为数字
从FreeMarker 2.3.22开始,变量名称还可以在任何位置都包含负(-),dot(.)和冒号(:),但必须使用前面的反斜杠(\)进行转义

7.html中大于号小于号的规避
有一个问题>=和 >。FreeMarker将该字符 >解释为FTL标签的结束字符。
为了防止这种情况,你可以使用lt的替代<,lte而不是 <=,gt代替 >和gte代替 >=,像<#if x gt y>。
另一个技巧是把表达式转换括号像 <#if (x > y)>,但它被认为是不太优雅。

8.用户自定义宏
格式为<#macro 宏名字 变量名N个 >
变量可以设置默认值
使用@宏名的方式调用宏

<#macro greet person color =“black” >
  <font size =“+ 2”color =“$ {color}”> Hello $ {person}!</ font>
</#macro>
<@greet person="Fred"/>
<@greet person="Fred" color="black"/>

9.嵌入nested
<#macro lls count>
   <p>hello nested</p>
   <#nested>
</#macro>

nested也可以带有参数
<#macro lls lsdata>
hello nexted
    <#list lsdata as va>
        <#nested va>
    </#list>
</#macro>

<@lls ["11","22","33","44"];a>
   this is: ${a}
</@lls>

10.四种变量定义
global assign local以及在list中定义的临时变量

<#global gl="global">
${gl}
<#assign al="assign">
${al}
<@mc></@mc>
<#macro mc>
  <#local ll="local">
  ${ll}
</#macro>

11.命名空间
import as 引入其他模版空间
当想覆盖引入的模版空间的值 或 向引入的模版空间中追加一些值的时候可以使用 in

下面的命名空间虽然有三个不同名字 但指向的同一个模版 修改其中一个也会影响其他的
<#import "/core.ftl" as core1>
<#import "/core.ftl" as core2>
<#import "/core.ftl" as core3>

<#import "/core.ftl" as core>
${core.ages.aa}
<@m2 core.ages.aa core.ages.bb core.ages.cc/>

<#assign dd="dd" in core>
${core.dd}

12.自动转义
1)可以使用线面的语句对模版进行自动转移设置
<#ftl output_format ="HTML" auto_esc=true>

2)?no_esc ?esc禁用单个转义

3)<#noautoesc></#noautoesc> <#autoesc></#autoesc>对一块代码转义

4)<#outputformat 'XML'></#outputformat>指定格式转义
<#assign mo1 ="<p>hell</p>"?esc>
HTLM:${mo1}
XML:<#outputformat 'XML'> ${mo1} </#outputformat>
RTF:<#outputformat 'RTF'> ${mo1} </#outputformat>

转载于:https://my.oschina.net/dajianguo/blog/883044

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值