`
ariyue
  • 浏览: 338262 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

freemarker 基本指令

    博客分类:
  • java
阅读更多
一:if指令:
<#if condition>...
<#elseif condition2>...
<#elseif condition3>...
...<#else>...
</#if>

二:switch
<#switch value>
<#case refValue1>...<#break>
<#case refValue2>...<#break>...
<#case refValueN>...<#break>
<#default>...</#switch>

三:list,break
<#list sequence as item>
...
</#list>
两个特殊的循环变量:
item_index: 当前变量的索引值。
item_has_next: 是否存在下一个对象。

可以用<#break/>指令离开loop循环。

四:include指令
<#include filename>或者
<#include filenameoptions>
filename: 表达式转换为字符串
options: encoding=encoding, parse=parse encoding: 表达式转换为字符串
parse: 表达式转换为逻辑值,是否作为ftl文件解析。
<#include "/common/navbar.html" parse=false encoding="Shift_JIS">

<#include "*/footer.ftl">表示当前目录下以及所有父目录下的文件。如果当前模版在/foo/bar/template.ftl ,那么查找footer.ftl的顺序为:/foo/bar/footer.ftl
/foo/footer.ftl/footer.ftl这种方式讲允许设计者将通用的模版放在父文件夹里面。
也可以只指定部分路径:<#include "*/commons/footer.ftl">

五:import指令<#import path as hash>
六:noparse
<#noparse>
...
</#noparse>

七:compress
<#compress>
...
</#compress>
八:escape,noescape
<#escape identifier as expression>
...
<#noescape>...</#noescape>
...
</#escape>

escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。

<#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}</#escape>
等同于:
First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}

escape指令在解析模版时起作用,而不是运行时起作用。

escape指令还能嵌套使用,子继承父的escape规则。

<#escape x as x?html>
Customer Name: ${customerName}
Items to ship:
<#escape x as itemCodeToNameMap[x]>
${itemCode1}
${itemCode2}
${itemCode3}
${itemCode4}
</#escape></#escape>
等同于:Customer Name: ${customerName?html}
Items to ship:
${itemCodeToNameMap[itemCode1]?html}
${itemCodeToNameMap[itemCode2]?html}
${itemCodeToNameMap[itemCode3]?html}
${itemCodeToNameMap[itemCode4]?html}

九:assign指令

<#assign name=value>
or
<#assign name1=value1name2=value2... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>
  capture this
</#assign>
or
<#assign name in namespacehash>
  capture this
</#assign>
创建或者替换一个已经存在的变量,只能作用于顶层变量。
不好的做法:<#assign x>Hello ${user}!</#assign>
更改为:<#assign x="Hello ${user}!">


十:global指令
<#global name=value>
or
<#global name1=value1name2=value2... nameN=valueN>or<#global name>
capture this
</#global>
十一:local指令
<#local name=value>
or
<#local name1=value1name2=value2... nameN=valueN>or<#local name>
capture this
</#local>只能用于macro的定义body中。


十二:setting指令:

<#setting name=value>
name的取值范围:
local:number_format:
boolean_format:缺省值为"true,false"
date_format, time_format, datetime_format
time_zone:url_escaping_charset
classic_compatible

十三:用户自定义指令

<@macro_or_transfparam1=val1param2=val2...paramN=valN/><@macro_or_transfparam1=val1param2=val2...paramN=valN ; lv1, lv2, ..., lvN/><@macro_or_transf...>
  ...
</@macro_or_transf>

<@macro_or_transf...>
  ...
</@><@macro_or_transfval1, val2, ..., valN/>

十四:macro,nested,return
<#macro nameparam1param2... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>

十五:function, return
<#function nameparam1param2... paramN>
... <#return returnValue>
...
</#function>

<#function avg x y>
<#return (x + y) / 2>
</#function>
${avg(10, 20)}

十六:flush
<#flush>

十七:stop
<#stop>
or
<#stop reason>取消处理模版。

十八:ftl指令
<#ftl param1=value1param2=value2...paramN=valueN>
ftl指令必须放在ftl文件的最上面。

参数范围:
encoding:
strip_whitespace
strip_text
strict_syntax

十九:t, lt, rt
二十:attempt, recover
<#attempt>
attempt block<#recover>
recover block
</#attempt>
<#attempt>
Optional content: ${thisMayFails}
<#recover>
Ops! The optional content is not available.
</#attempt>
分享到:
评论

相关推荐

    freemarker培训

    1开发freemarker准备工作,运行第一个freemarker 22freemarker基本数据交互 33freemarker指令 44ftl数值计算和默认value以及value转换 基本插件安装,文档以及项目源代码。

    freemarker总结

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...

    超完整FreeMarker中文教程,代码

    什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................

    freemarker+struts2仿QQ分页效果

    不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月接触了freemarker后,实在是用的爽死了,为什么不用freemarker的macro指令写个通用的分页呢?马上想到模仿TX的...

    FreeMarker 手册

    2.1 基本内容 ................................................................................................... 19 2.2 类型 ..............................................................................

    FreeMarker中文指导手册

    2.1 基本内容 ................................................................................................... 19 2.2 类型 ..............................................................................

    Java学习指南(11) FreeMarker与MVC框架

    〖主要内容〗包含以下内容,具体以课程目录为准:* 开发环境与API* 基本类型的插值* Hash 与 Sequece类型的插值* 常用的 built-in 用法* 等指令的用法* 自定义函数 Method Variables * 共享变量 Shared ...

    Java Web程序设计教程

    .2.2.2基本配置 22 2.2.3服务器页面介绍 23 2.3eclipse的下载与安装 24 2.3.1eclipse的下载与安装 24 2.3.2熟悉eclipse开发环境 24 2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个...

    深入浅出Struts2(附源码)

    24.1 JSP include指令/标签的不足 302 24.2 Tiles布局和定义 303 24.2.1 布局页面 303 24.2.2 Tiles定义 304 24.3 Struts Tiles插件 305 24.4 Struts Tiles示例 306 24.5 小结 309 第25章 JFreeChart插件 310...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    24.1 JSP include指令/标签的不足 302 24.2 Tiles布局和定义 303 24.2.1 布局页面 303 24.2.2 Tiles定义 304 24.3 Struts Tiles插件 305 24.4 Struts Tiles示例 306 24.5 小结 309 第25章 JFreeChart插件 310 25.1 ...

Global site tag (gtag.js) - Google Analytics