FreeMarder学习总结

最常用的3个概念
sequence 序列,对应java里的list、数组等非键值对的集合
hash      键值对的集合
namespace 对一个ftl文件的引用,利用这个名字可以访问到该ftl文件的资源

指令
if, else, elseif
switch, case, default, break
list, break
include
Import
compress
escape, noescape
assign
global
setting
macro, nested, return


常用语法
输出:输出对象book的name属性:${book.name}
判断为空值:${book.name?if_elsets} 或者<#if book.name??>
设置默认值:${book.name?default('xxxx')}或者 ${ book.name!"xxx"}
日期格式:${book.date?string('yyyy-MM-dd')}
数字格式:${book?string.number}<#--20->
${book?string.currency}<#--$20->
${book?string.percent}<#-20%->
插入布尔值:<#assign foo = true/>
${foo?string("yes","no")}<#-yes->

逻辑判断
<#if condition>
<elseif condition2>
</#if>
空值判断<#if book.name??>
<#switch value>
<#case refValue1>
<#break>
<#case refValue2>
<#break>
<#default>
</#switch>

循环读取
<#list employess as e>
 ${e_index}.${e.name}
<#list>
<#if mole?default(0)!=0>

压缩空白空间和空白行
<#assign x = "    moo">
<#compress>
1    2    3 4 7  9
${abcd}
test only

I said,test only

)
输出
(1 2 3 4 7 9
abcd
test only
I said,test only

Sequence内置的计算器
显示序列号 
item_index:是list当前值的下标
item_has_next:判断list是否还有值
<#list employees as e>
${e_index}..${e.name}
<#list>
输出: 1.aaa
 2.bbb
 3.ccc
Sequence内置分段器:chunk
用途:某些比较BT的排版需求
模板:
<#assign seq = ['a','b','c','d','e','f','g','h','i']>
<#list seq?chunk(4)as row>
<ul>
 <li><#list row as cell>${cell}</#list></li>
</ul>
</#list>
<#list seq?chunk(4,'---') as row>
<ul>
 <li><#list row as cell>${cell}></#list></li>
</ul>
输出
<ul><li>a</li><li>b</li><li>c</li><li>d</li><ul>
<ul><li>e</li><li>f</li><li>g</li><li>h</li><ul>
<ul><li>i</li><ul>
<ul><li>a</li><li>b</li><li>c</li><li>d</li><ul>
<ul><li>e</li><li>f</li><li>g</li><li>h</li><ul>
<ul><li>i</li><li> --- </li><li> --- </li><li> --- </li><ul>
</ul>

Freemarker的list
List 元素为Scalar对象
<#list scalarList as value0>
 Scalar 的 list值:${vlue0}
</#list>
List 元素为Object
<#list objectList as object>
 Object 的 list值:${object.name}
</#list>
Map 的Values元素为 Scalar
<#list scalarMap?keys as mykey>
 Scalar 的Map key值是:${mykey]
 Scalar 的Map values 值是:${scalarMap[mykey]}
</#list>
Map 的Map Values元素为 Object
<#list objectMap?keys as key>
 <#assign mapUser="userMap[key]">
 The User Object is ${mapUser}
 The UserId is ${mapUser.userId}
</#list>
 
FreeMarker中的list 排序
升序:<#list lsit?sort_by('time') as v> ${v}</#>
降序:<#list list?sort_by('') as v>${v}></#>

Freemark在模板中定义变量
plain变量:可以在模板的任何地方访问,包括include指令插入的模板,使用

assign指令创建和替换
<#include filename options>
options包含两个属性
encoding=”GBK” 编码格式
<#import path as hash>
类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件

里的宏组件

假设mylib.ftl里定义了宏copyright那么我们在其他模板页面里可以这样使用
<#import "/libs/mylib.ftl" as my>

<@my.copyright date="1999-2002"/>

"my"在freemarker里被称作namespace


parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在

ftl文件里布尔值都是直接赋值的如parse=true,而不是parse=”true”
<#import path as hash>
类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件

里的宏组件
<#include "/WEB-INF/index/top.html" encoding=”utf-8">
Sequence的内置函数

freemarker.properties配置
解决中文乱码问题:
default_encoding=UTF-8
locale=zh_CN
number_format=#

提高freemarker的性能
template_update_delay=6000

freemarker的表签种类:
${} #代表FTL tags
<#if></#if>
@,代表用户自定义标签
<#--- ---  --- --->

注释标志
<#--
这里是注释
-->
旧版本的freemarker采用的是<#comment> 注释 </#comment>方法

1.sequence?first 返回sequence的第一个值。

2.sequence?last 返回sequence的最后一个值。

3.sequence?reverse 将sequence的现有顺序反转,即倒序排序

4.sequence?size 返回sequence的大小

5.sequence?sort 将sequence中的对象转化为字符串后顺序排序

6.sequence?sort_by(value) 按sequence中对象的属性value进行排序

注意:Sequence不能为null

 

二、Hash的内置函数

1.hash?keys 返回hash里的所有key,返回结果为sequence

2.hash?values 返回hash里的所有value,返回结果为sequence

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值