六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 64|回复: 0

Freemarker 教你几招(适合初学者,欢迎拍砖)

[复制链接]

升级  56%

36

主题

36

主题

36

主题

秀才

Rank: 2

积分
134
 楼主| 发表于 2013-2-7 16:36:34 | 显示全部楼层 |阅读模式
第一招:迭代Map
      假设你有一个Map,像这样:
{"name":"mouse", "price":50 , "weight":30} 
如何来迭代输出?
<#-- 这里模拟了一个Map集合,定义了三对键值 --><#assign h = {"name":"mouse", "price":50, "weight":30}><#-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,从这里我们也可以学到如何去调用一个类的方法 --><#assign keys = h?keys> <#-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 --><#list keys as key>${key} = ${h[key]}; </#list> 
输出结果:
name = mouse; price = 50; weight = 30;  
第二招:如何判定字符串相等
      这个有点小题大作,呵呵,其实很简单
<#-- 定义了一种动物——狗 --><#assign annimal = "Dog"><#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"注意:这里使用一个"="--><#if annimal = "Dog">Wang! Wang!<#else>Ga! Ga!</#if> 
输出结果:
Wang! Wang!  
第三招:处理空值
      先要说明的是,在freemarker中,如果你试图去访问一个不存在的值(null),或者该值在访问时还没有被初始化,
那么它会毫不犹豫的抛给一个错误,并且立即终止模板的执行过程。为什么这么变态?
 
如何对付这样的情况?
答案:在它访问这个值失败的时候,给它一个默认的值!嘻嘻……
 
怎么赋默认值?
用这样的语法:
unsafe_expr!default_exprunsafe_expr!(unsafe_expr)!default_expr(unsafe_expr)!

例子:
<#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"当然"!"后面的这个值可以是一个表达式-->${mouse!"No mouse."}<#-- 给mouse赋值 "Jerry" --><#assign mouse="Jerry"><#-- 再次访问mouse -->${mouse!"No mouse."} 
输出结果:
No mouse.Jerry  
另外对于"!"后面没有写任何值的情况,那么它的值可能是空String、空sequence 、空hash。
但是如果你想默认值是0或者false,那么你最好还是显式的指定,因为它不会对你那么友好的(Bad luck!)
还需要注意的是:
1. product.color!"red" 2. (product.color)!"red" 这两种写法所表示的含义是不一样的:第一种写法只处理color为空的情况,对于product为空则束手无策。第二种写法则可以同时处理product及color同时(或任意)为空的情况。 
插播,如何判断空值?
语法:unsafe_expr?? 或 (unsafe_expr)?? 返回值为true和false
 
第四招:几个常用的函数
    使用函数的方式就像这样:user?upper_case 简单吧?
字符串函数:
html:将会把一些特殊的html字符替换掉(比如:把 "<" 替换为"<")
cap_first:首字母大写
lower_case:转化为小写
upper_case:转化为大写
trim:去掉首尾的空白,包括空格、Tab、回车、换行

例子:
<#-- 定义test值为"Tom & Jerry" --><#assign test = "Tom & Jerry">${test?html}${test?upper_case?html}输出为:Tom & JerryTOM & JERRY  
序列(也就是常说的List或Set等集合)函数:
size:显示该序列的大小
 
数学函数:
        int:取整(例如: -1.9?int 返回值是 -1)
 
到这里吧,先到这里了……
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表