freemarker

第一章:基本



一、if指令

    <# if condition>

    <#else>

    </#if>



二、list指令

    <#list sequence as loopVariable>repeatThis</#list>

        repeatThis 部分将会在给定的 sequence 遍历时在每项中重复,从第一项开始,

        一个接着一个。 在所有的重复中, loopVariable 将持有当前项的值。 这个循环变量仅

        存在于<#list …>和</#list>标签之间。



三、include指令

    <#include "/copyright_footer.html">



四、联合使用指令

    <#list animals as begin>

    <tr>

        <td>

            <#if begin.size == "large"><font size="+1"></#if>

            ${being.name}

            <#if begin.size == "large"></font></#if>

        </td>${begin.price} Euros

    </tr>

    </#list>

五、不存在的变量: 不允许,但是定义了处理规则之后是可以的。

    方式一:指定默认值: ${变量名!默认值}

        <h1>Welcome ${user!"DefaultValue"}</h1>

    方式二:结合if指令使用:

        <#if user??><h1>Welcome ${user}</h1></#if>



         变量名??  :如果存在返回true,否则返回flase。



    补充:

        关 于 多 级 访 问 的 变 量 , 比 如 animals.python.price , 书 写 代 码 :

        animals.python.price!0 ,仅当 animals.python 存在而仅仅最后一个子变

        量 price 可能不存在(这种情况下我们假设价格是 0)。 如果 animals 或者 python

        不存在,那么模板处理过程将会以“未定义的变量”错误而停止。 为了防止这种情况的发生,

        可以这样来书写代码(animals.python.price) !0。这种情况下当 animals 或

        python 不存在时表达式的结果仍然是 0。 对于 ??也是同样用来的处理这种逻辑的:

        animals.python.price?? 对比(animals.python.price)?? 来看。





第二章: 数值和类型

一、数值

二、类型

    一】标量

        1)字符串:简单文本

        2)数字:整数和非整数是不区分的,只有单一的数字类型。 3/2=1.5

        3)布尔值:代表了逻辑上的对与错。(模版中可以使用true和false)

        4)日期:日期变量可以存储和日期/时间相关的数据。

    二】容器

        1)哈希表:每个子变量都可以通过一个唯一的名称来查找,这个名称是不受限制的字

                    符串。 哈希表并不确定其中子变量的顺序,也就是说没有第一个变量,第二个变量

                    这样的说法,变量仅仅是通过名称来访问的。

        2)序列:每个子变量通过一个整数来标识,

                 子变量是有序的,整数通常被称为子变量的索引

                 子变量的数值类型不需要完全一致。

        3)从模板设计者角度来看,集是有限制的序列。不能获取集的大小,也不能通过

           索引取出集中的子变量,但是它们仍然可以通过 list 指令来遍历。

    三】子程序:

        1)方法和函数:

            函数/方法也可以是其他函数或方法的参数或者返回值,并可以把它们定义成变量。

            区别:

                方法:来自于数据模型,反射了java对象的方法

                函数:定义于模版内。

            可以用同一种方式来使用。



第三章 模版

一、总体结构    

    Text文本:照原样输出

    interpolation 插值:${变量名}

    FTL tags 标签: FTL标签和HTML标签很相似,给FreeMarker指示

    comments 注释:<#--注释的内容-->  会被FreeMarker忽略掉,更不会在输出内容中显示。



    注意:

        1)FTL标签不可以在其他FTL标签和插值中使用:<#if <#include 'foo'>='bar'>>...</if>

        2)注释相反可以放在FTL标签和插值中间使用

                eg:

                    ${user <#--The name of user-->}      <#List <#-- some comment --> animals as <#--again-->></#list>

二、指令

    预定义指令:<#directivename parametes>...</#directivename>

    自定义指令:<@mydirective parameters>...</@mydirective>

三、表达式

        插值:       ${(5+8)/2}   打印6.5

        指令参数   <#if 2 < 3 >   成立(2<3为rue)

    一】字符串

        1)"some text" 和 'some text' 形式相等。

        2)\为转移字符  eg: \\ \" \'

        3)表明字符串为原生字符串,加r  ${r"${foo}"}  ${r"c:\foo\bar"}

        

    二】序列

        使用逗号来分隔其中的每个子变量,然后把整个列表放到方括号中

            列举:<#list ["winter", "spring", "summer", "autumn" as x]>${x}</#list>

            范围: 2..5 等价于[2, 3, 4, 5] 但是使用前者(没有[]符号)会更有效率(内存占用少而且速度快)。

 

你可能感兴趣的:(freemarker)