首页 > 代码库 > freemarker

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