freemaker一些帮助

注释:<#-- 注释内容 --> 不会输出

插值(interpolation):${表达式} 或 #{表达式} ,将使用数据模型中的数据替换后再输出

d) FTL指令:

内置(预定义)指令:<#指令名 属性名="值">主体</#指令名> 如:<#if user??>${user.loginname}</#if>

自定义指令: <@指令名 属性名="值">主体</@指令名>


2) 插值规则

a) 表达式放置在插值语法${}之中,用于输出表达式的值。

b) 表达式的值的类型可以是:字符串、 数字、布尔、日期时间、序列、Hash结构

c) 表达式支持Java中的所有运算符:

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

比较运算符:==(eq)、!=(ne)、>(gt)、>=(gte)、<(lt)、<=(lte)

逻辑运算符:&&(and)、||(or)、!(not)

三目运算符:? :


d) 内置函数:

Ⅰ) 使用方式:表达式?函数名[(实参)]

Ⅱ) 字符串的常用内置函数: substring(from[, to])、html、length、trim、url

示例:<#setting url_escaping_charset="UTF-8"> 、exp?url[("UTF-8")]

Ⅲ) 数字的常用内置函数:c、string[(数字模式串)]、

Ⅳ) 布尔的内置函数:string[("男", "女")]

Ⅴ) 内置的常用日期时间函数:string[("格式模式串")]、datetime、date、time

e) 序列:

在FTL中定义的序列:由方括号包括,各元素用英文逗号分隔如:<#assign seq=["winter", "spring", "summer", "autumn"]>

也可以用数字范围(递增、反递增)定义数字序列: <#assign nums=101..105> 或 <#assign nums=105..101>

在数据模型中:可以是List对象、Set对象

序列的常用内置函数:size、sort[("指定字段作排序依据")]

f) Hash结构:

在FTL文件中直接定义时:由大括号包括,由逗号分隔键/值列表,键和值之间用冒号分隔。键必须是字符串。


如: <#assign scores={"语文":78, "数学":89, "英语":87}> ${scores.语文}

在数据模型中:可以是Map对象

Hash结构的内置函数:size、keys、values


3) FreeMarker中的空值判断

a) 判断是否为空值:用??(?if_exists,?exists) 如果不为空返回true,否则返回false。

b) 通过Configuration设置:Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);

c) 属性配置方式:在freemarker.properties文件中classic_compatible=true

d) 通过ftl设置:在ftl文件头前加入<#setting classic_compatible=true>

e) 在FTL中遍历序列、Hash结构时:<#if userList??><#list userList as user>....</#list></#if>


4) 常用内置指令:

a) if/else

<#if condition>

...

<#elseif condition2>

...

<#elseif condition3>

...

...

<#else>

...

</#if>


b) switch/case

<#switch value>

<#case refValue1>

...

<#break>

<#case refValue2>

...

<#break>

...

<#case refValueN>

...

<#break>

<#default>

...

</#switch>


c) list

<#list sequence as item> <#-- item_index 当前迭代项的索引 -->

...

</#list>


d) include 包含指定文件。类似于JSP中的include标准动作

<#include "文件路径" [encoding="charset"] [parse=true|false]>


e) import 导入指定模板中的所有变量。

<#import "文件路径" as hash>


f) noparse 不处理该指令中包含的内容

<#noparse>

</#noparse>


g) assign: 为当前模板页面创建或替换一个顶层变量

<#assign

<#assign name1=value1 name2=value2 ... nameN=valueN>


h) global:创建或替换一个命名空间全局范围作用域的顶层变量

i) local:创建或替换一个局部作用域的顶层变量

j)setting 设置FreeMarker运行时的属性.语法:<#setting

name常用的有:

locale:该模板所使用的语言环境选项。en,zh,zh_CN,zh_TW

number_format:数字格式化输出的格式

boolean_format:布尔值格式化输出的格式

date_format,time_format,datetime_format:日期时间格式化输出的格式

time_zone:格式化输出日期时间所使用的时区。

url_escaping_charset:URL编码的字符集。


k) 自定义指令:<#macro 指令名 属性名...>...</#macro>

用自定义指令写的一个分页标签参见本人博客:qjyong/archive/2009/10/18/4693142.aspx


6. Web应用中整合FreeMarker:FreeMarker提供了FreemarkerServlet类来整合模板到Web应用中:

1) 这个Servlet在数据模型中放置了三个Hash结构:

Request, Session, Application,分别用来访问请求,会话,应用上下文中的属性。

访问作用域中的属性时,没有指定Hash结构名,它会依次按Request,Session,Application顺序搜索。

2) 它还提供了一个名为RequestParameters的Hash结构,用来访问HTTP请求中的参数数据。


7. Struts2中整合FreeMarker: Struts2默认就是使用FreeMarker来产生所有UI标签的HTML标记。

1) 提供了FreeMarkerResult来支持FTL页面。

<result type="freemarker">/templates/info.ftl</result>

2) FreeMarker针对Struts2提供了以下内置Hash结构:

a) stack: 代表ValueStack本身


b) action: 代表刚刚执行过的Action实例

c) response: 代表HpptServletResponse实例

d) res: 代表HpptServletResponse实例

e) request: 代表HpptServletRequest实例

f) req: 代表HpptServletRequest实例

g) session: 代表HpptSession实例

h) application: 代表ServletContext实例

i) base: 代表用户请求的上下文路径


8. 使用FreeMarker完成页面的静态化:


你可能感兴趣的:(freemaker一些帮助)