Freemark--What is Freemark?
FreeMark是一套模板引擎,也就是一套用过提供==数据模型==和==HTML模板==生成动态页面的通用工具。
--request
--template + Freemark-dataService
--HTML
--response
既Freemark通过提供的==模板==+==数据模型==动态生成HTML界面返回给用户的一套引擎工具。他会在WEB服务器
响应response
用户请求request
的时候通过部署在WEB服务器上的模板动态的生成不同的界面返回。这里的数据模型常常是java对象。
Base Grammar--How to use freemark in program?
Freemark有一套自己的基础语法(大体上和HTML相似),通过基础语法可以迅速的生成不同的界面。
在日常的开发中只要掌握简易的Freemark语法加上一点HTML基础就能迅速的入手开发。
${......}:FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为interpolation(插值).
注解:注释和HTML的注释也很相似,但是它们使用<#-- and -->来标识。不像HTML注释那样,FTL注释不会出现在输出中(不出现在访问者的页面中),因为FreeMarker会跳过它们。
FTL标签:FreeMarker模板的语言标签。FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。这些标签的名字以==#==开头。
(用户自定义的FTL标签则需要使用@来代替#)
给出几个常用的指令,其余指令在开发需要时查询即可
<#if condition>...
<#elseif condition2>...
<#elseif condition3>...
<#else>...
</#if>
<#include>...
</#include>
<#import "/lib/common.ftl" as com>
<#switch value>
<#case refValue>...<#break>
<#case refValue>...<#break>
<#default>...
</#switch>
<#list>...
</#list>
Inner function--Advanced tutorials
就像是java中方法一样,内建函数通常为我们开发WEB程序提供便利。它们并不是数据模型中的东西,是FreeMarker在数值上添加的。为了清晰子变量是哪部分,==使用?代替==,.(点)来访问它们。
-
[x]
html 如果在 <#list animals as animal> ... </#list> animal?index给出了在animals中基于0开始的animal的索引值 animal?counter也像index,但是给出的是基于1的索引值 animal?item_parity基于当前计数的奇偶性,给出字符串“odd”或“even”。在给不同行着色时非常有用,比如: <td class="${animal?item_parity}Row">
内建函数多种多样,并不一一列举,只举出几个常用的
cap_first:使字符串第一个字母大写
lower_case:将字符串转换成小写
upper_case:将字符串转换成大写
trim:去掉字符串前后的空白字符
exists:判断对象是不是null
也可以直接${mouse?if_exists})
${openingTime?date} ${openingTime?date_time} ${openingTime?time}
输出布尔形 常用格式化日期 openingTime必须是Date型,详细查看freemarker文档 Reference->build-in referece->build-in for date
其余开发用到的时候在去查询即可,值得一提的是== 空值 ==
数据模型中经常会有可选的变量(有时并不存在)。除了一些人为原因导致失误外,FreeMarker不能引用不存在的变量,除非明确地告诉它当变量不存在时如何处理,如下两种典型的处理方法:
- 这部分对程序员而言:一个不存在的变量和一个是null值的变量
- 对于FreeMarker来说是一样的,所以这里所指的“丢失”包含这两种情况。
- 在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名后面跟着一个==!==和==默认值==。
<h1>Welcome ${user!"visitor"}!</h1>
这个例子,当user不存在于数据模型时,模板将会将user的值表示为字符串 “visitor”。(当 user 存在时,模板就会表现出 ${user} 的值)
! 空值的语法:
- variable!
- variable!defaultValue
第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象.