模板语言——freemarker

对象结构图

模板语言——freemarker
iPan 更新:2013-10-13

 

思想:模板 + 数据模型 = 输出
freemarker能够生成各种文本:HTML、XML、RTF、Java源代码等;

 

Configuration基本配置

setDirectoryForTemplateLoading(File dir):设置模板存放路径——文件路径;

setServletContextForTemplateLoading(Object sctxt, String path):设置模板存放路径——Servlet上下文;

setClassForTemplateLoading(Class clazz, String pathPrefix):设置模板存放路径——类路径;

setTemplateUpdateDelay(int delay):设置模板文件更新时间(毫秒);

setStrictSyntaxMode(boolean b):开启/关闭严格的语法,默认为true;

setWhitespaceStripping(boolean b):开启/关闭空白移除,默认为true;

setTagSyntax(int tagSyntax):设置ftl标签的类型;

     •AUTO_DETECT_TAG_SYNTAX: 可以自定义格式,系统会选择第一个标签作为参照;

     •ANGLE_BRACKET_TAG_SYNTAX: 使用尖括号;

     •SQUARE_BRACKET_TAG_SYNTAX: 使用方括号;

setSharedVariable(String name, TemplateModel tm):设置共享变量;

setSharedVariable(String name, Object obj):设置共享变量;

setAllSharedVariables(TemplateHashModelEx hash):设置共享变量;

clearSharedVariables():清除共享变量;

clearTemplateCache():清除缓存;

setSetting(String key, String value):为freemarker做配置属性的入口;

getTemplate:一系列获取Template的方法;


Template处理方法

process(Object rootMap, Writer out)

process(Object rootMap, Writer out, ObjectWrapper wrapper, TemplateNodeModel rootNode)

process(Object rootMap, Writer out, ObjectWrapper wrapper)


标签语法

组成

文本:原样输出;

插值:使用${...}来从数据模型取数据;仅能在文本中使用和字符串文字中使用;例如:在文本区段(<h1Hello ${name}!</h1 )和字符串文字(#include "/footer/${company}.html" 

指令:默认使用#开头(自定义标签使用@开头)的标签,类似HTML标签,交给后台程序处理;标签不能嵌套,例如:#if #include 'foo'='bar'.../#if 

注释:使用#-- ... --来注释;可以嵌套在标签、插值中;

参考:Freemarker参考手册的第四部分第二章 指令参考文档;


数据类型快速参考

(1)直接指定值

字符串:"Foo" 或者 'Foo' 或者 "It's "quoted"" 或者 r"C:\raw\string"

数字:123.45

布尔值:true, false

序列:["foo", "bar", 123.45], 1..100

哈希表:{"name":"green mouse", "price":150}

(2)检索变量

顶层变量:user

从哈希表中检索数据:user.name, user[“name”]

从序列中检索:products[5]

特殊变量:.main

(3)字符串操作

插值(或连接):"Hello ${user}!" (或"Free" + "Marker")

获取一个字符:name[0]

(4)序列操作

连接:users + ["guest"]

序列切分:products[10..19] 或 products[5..]

(5)哈希表操作

连接:passwords + {"joe":"secret42"}

算数运算:      (x * 1.5 + 10) / 2 - y % 100

比较运算 :x == y, x != y, x < y, x > y, x >= y, x <= y, x < y,  等等

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

内建函数:name?upper_case

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

(6)处理不存在的值

默认值:name!"unknown" 或者(user.name)!"unknown" 或者 name! 或者 (user.name)!

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


转义符

转义序列           含义

\                 引号(u0022)

\’                单引号(又称为撇号)(u0027)

\\                反斜杠(u005C)

\n                换行符(u000A)

\r                回车(u000D )

\t                水平制表符(又称为标签)(u0009)

\b                退格(u0008)

\f                换页(u000C)

\l                小于号:<</p>

\g                大于号:>

\a                和号:&

\xCode            字符的16 进制 Unicode 码 (UCS 码)

在\x 之后的 Code 是1-4 位的16 进制码。下面这个示例中都是在字符串中放置版权符号"\xA9 1999-2001", "\x0A9 1999-2001", "\x00A9 1999-2001":如果紧跟16进制码后一位的字符也能解释成16进制码时,就必须把4位补全,否则FreeMarker  的解析就会出现问题。


内建函数

使用:${变量?函数?函数...},函数可以向后传递;

常见函数:

html:处理特殊HTML字符;

cap_first:字符串的第一个字母变成大写形式;

lower_case:小写形式;

upper_case:大写形式;

trim:去掉首尾空格;

size:序列个数;

int:截取数字的整数部分;

repeat:重复多次;

其它内建函数,参考手册第四部分第1.8章 内建函数;

1 byte, double, float, int, long, short类型转换

2 number_date, number_to_time, number_to_datetime数字转时间

3 eval求值

4 has_content是否有内容

5 interpret将字符串解释为ftl模板

6 is_...判断函数族

模板语言——freemarker

7 namespace命名空间

8 new 创建TemplateModel实现


表达式

算术运算:+、-、*、/、%;

关系运算:gt、gte、lt、lte、==、!=;

逻辑运算:!、&&、||;


处理不存在的变量(未定义或者是null)

使用默认值

例如:${data!"0"}、${animals.python.price!0}

使用if判断

例如:<#if data??${data?String}/#if>


freemarker标签语法,参考官方参考手册

-------------------------------------------------------------------------------------

注意事项

1 ftl模板不是xml,属性并不一定要带双引号;ftl模板不是html,不一定有</xxx

<#assign list1=["aaa", "bbb", "ccc"]> <#-- 没有元素关闭标签 -->

<#macro listToStr list separator>

    @compress single_line = true>

    #if list?exists>

        #list list as item>

            ${item}#if item_has_next${separator}</#if>

        /#list>

    /#if>

    /@compress>

</#macro>


<@listToStr list=list1 separator="," / <#-- 没有双引号 -->


2 不能像OGNL表达式那样方便地调用方法,集合遍历需要使用内置函数;


3 在struts2下使用标签,默认可以使用<@s.tag></@s.tag>来访问struts2标签;


freemarker支持多语言国际化,只要把模板名称安装资源文件的写法就可以了,也就是name_语言_国家地区.ftl

如果找不到对应的语言,就会用默认语言的模板。


宏使用参考:http://blog.chinaunix.net/uid-725717-id-2060340.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值