当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

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

发表于: 2008-08-21   作者:dongwei_6688   来源:转载   浏览次数:
摘要: 第一招:迭代Map      假设你有一个Map,像这样: {"name":"mouse", "price":50 , "weight":30}  如何来迭代输出? <#-- 这里模拟了一个Map集合,定义了三对键值 --> <#ass

第一招:迭代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字符替换掉(比如:把 "<" 替换为"&lt;")

cap_first:首字母大写
lower_case:转化为小写
upper_case:转化为大写
trim:去掉首尾的空白,包括空格、Tab、回车、换行


例子:

<#-- 定义test值为"Tom & Jerry" -->
<#assign test = "Tom & Jerry">
${test?html}
${test?upper_case?html}

输出为:
Tom & Jerry
TOM & JERRY 

 

序列(也就是常说的List或Set等集合)函数:

size:显示该序列的大小

 

数学函数:
        int:取整(例如: -1.9?int 返回值是 -1)

 

到这里吧,先到这里了……

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
<img src="http://img.it610.com/image/product/ad85210bef004a6d85d06e234eb3068a.jpg" width="
云寻觅实时搜索引擎:完全自主开发,下周开源 从0开始的搜索引擎开始公开测试 http://sousuo.yunxun
C#.NET我是个新手。前几天跟同事在做项目时,用了Repeater控件来实现,因为以前都是用AspNetPager。
闲话少说,直入主题。作为软件开发者或者IT企业,我们都希望重用已有的组件,节省成本,提升效率。
闲话少说,直入主题。作为软件开发者或者IT企业,我们都希望重用已有的组件,节省成本,提升效率。
积极响应号召,我也在JAVAEYE注册啦,而且我的JAVAEYE博客从今天起正式落户。想了很久的用户名最终
某个客户看中了某个在线客服系统;要做个和他一样的;于是就从宇宙中空降了一个531KF; 531KF(ASP.N
早上起来,外面的雨下的稀里哗啦……本来事先约定好的朋友聚餐也因此取消了。 心想,闲着也是闲着,
日期:2012-7-26 来源:GBin1.com 你有没有查看过全部PHP 的方法,我大概统计了一下,在PHP参考 中
前言: 培训机构是每年都花费几十万的广告费用在报纸上打广告,都是报社的重大客户,商场如战场,培
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号