FreeMarker汇总

在使用FreeMarker时需要用到以下几个方面:

  • FreeMarker在工程中与MVC结合的配置
  • 使用FreeMarker的基本语法
  • Freemarker静态化的支持
  • 如何实现Freemarker自定义标签
  • Freemarker宏定义
一、FreeMarker在工程中与MVC结合的配置

 

二、FreeMarker的基本语法

基本输出:${student.name}

空值判断:${student.name?if_exists} or <#if student.name??>

默认值:   ${student.name?default('xxx')}或者${student.name!"xxx"}//每次输出最好带默认值,防止空指针

日期格式:${student.birthday?string('yyyy-MM-dd')}

数字格式:${student.age?string.number} //20

          ${student.age?string.currency} //20.00

          ${student.age?string.percent} //20%

传递url的参数:<a href='search.htm?name=${student.name?url}'>查询</a> //对于中文参数,freemarker会自动给我们编码

定义并输出boolean值:<#assign flag=ture /> ${flag?string("yes","no")} //yes

 

逻辑判断

a:if else 形式

<#if condition>...<#elseif condition2>...<#else>...</#if>

 

b:switch 形式

<#switch value>

<#case refValue1>...<#break>

<#case refValue2>...<#break>

<#default>...

</#switch>

 

循环

a.遍历普通list:

<#list someList as item>...</#list>

 

b.遍历list的前面几项:

<#assign x=3><#list 1..x as i>${i}</#list>

 

c.遍历map:

<#list nameMap.keySet() as name>${name}-${nameMap.get(name)}</#list>

或者

<#list nameMap?keys as name>${name}-${nameMap.get(name)}</#list>

或者

<#list nameMap?keys as key>${key}-${afterCheckMap[key]}</#list>

 

list排序输出

a.按照属性name进行排序(默认升序):

<#list someList?sort_by(["name"]) as item>${item.name}</#list>

 

b.按照属性name进行降序排序:

<#list somelist?sort_by(["name"])?reverse as item>${item.name}</#list>

 

注意:

  • list指令还隐含了两个循环变量:item_index:当前迭代项在所有迭代项中的位置,是数字值。
  • item_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。
  • 关于map的key,它必须是String,这个在一定程度上限制了后台程序对于map的表达。

比较符

大于:gt

小于:lt

大于等于:gte

小于等于:lte

 

使用方法很简单

<#if x gt 1>...</#if>

 

其他参考资料如下:

内置函数 数字、字符串、日期格式化用法介绍:http://blog.csdn.net/lufeng20/article/details/7790156

 

三、Freemarker静态化的支持

 

四、如何实现Freemarker自定义标签

 

五、Freemarker宏定义

宏定义能够减少重复代码的编写,也可以封装几个不同的脚本(例如分页模块),供页面开发人员使用。同时也利于样式的扩展。

 

简单实例

定义一个简单的分页样式宏:<#macro pager><div class="pager-style">这是个分页样式</div></#macro>

调用宏:<@pager/>

 

在macro指令中可以在宏变量之后定义参数

<#macro pager pageIndex>

  <div class="pager-style">这是第${pageIndex}页</div>

</#macro>

调用宏:<@pager pageIndex="1"/>

 

注意此种情况:<@pager pageIndex=pagination/>

此时的pagination变量的值传给pageIndex参数,该值不仅是字符串,还可以是其它类型,甚至是复杂的表达式。

 

定义多参数的宏

<#macro pager pageIndex totalSize>

  <div class="pager-style">这是第${pageIndex}页,总共${totalSize}条记录</div>

</#macro>

调用时参数的次序是无关的:<@pager pageIndex="1" totalSize="20"/>

 

在定义宏参数时可以指定缺省值,若未指定则必须保证对所有参数进行赋值,否则会出现空指针异常:

<#macro pager pageIndex totalSize pageSize="10">

  <div class="pager-style">这是第${pageIndex}页,总共${totalSize}条记录,每页${pageSize}条</div>

</#macro>

注意:宏的参数是局部变量,只能在宏定义中有效。

 

在宏里嵌套内容

<#nested>//该指令会获取宏调用指令开始和结束标记之间的模板片断

<#macro pager><div class="pager-style">这是个分页样式</div></#macro>

执行宏调用:<@pager>我爱分页</@pager>

执行结果:我爱分页<div class="pager-style">这是个分页样式</div>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值