freemarker学习笔记

 freemarker
指令:<#xxx>
自定义指令<@xxx>
转换${1.1?int}
${aa?c}作用把String转换为数字,因为freemarker默认的会采用科学计数法,比如1,000,000
html:对字符串进行HTML编码
cap_first:使字符串第一个字母大写
lower_case:将字符串转换成小写
upper_case:将字符串转换成大写
trim:去掉字符串前后的空白字符
序列使用的:
size:获得序列中元素的数目
数字使用的:
int:取得数字的整数部分(如-1.9?int的结果是-1)
<#setting number_format="number"/>
<#setting date_format=""/>
<#setting time_format=""/>
<#setting datetime_format=""/>
<#assign answer=42/>
<#if s?exists>
${s?if_exists}
exists用在逻辑判断,而if_exists用来打印东西时用到,如果存在打印,不存在打印空字符串.
exp1?exists将会被exp1??代替
exp1?if_exists将会被exp1!代替
exp1?default(exp2)将会被exp1!exp2,这些在2.4版本中会体现到??

 <#setting datetime_format="yyyy-MM-dd HH:mm"/>
  <#setting date_format="yyyy-MM-dd"/>
  <#setting time_format="HH:mm"/>
  <#assign xxx="2006-10-13 10:30:20"/>
  ${xxx?datetime}

<#assign i=30/>
<#assign ii=30.00/>
<#assign str="test"/>
${ii},${ii?int},${ii?double},${ii?float},${i},${i?double},${str?if_exists},${s?if_exists},

<#if s?exists>
${"test"}
<#else>
${"noexists"}

<#assign x=1,y=2,z=3/>
<#if x=1>
x=1
<#elseif y=1>
y=1
<#elseif z=1>
z=1





<#list 1..6 as t>
xxx${t}

===============================================================================================

第一招:迭代Map
      假设你有一个Map,像这样:

Xml代码 复制代码
  1. {"name":"mouse", "price":50 , "weight":30}  

 
如何来迭代输出?

Html代码 复制代码
  1. <#-- 这里模拟了一个Map集合,定义了三对键值 -->  
  2. <#assign h = {"name":"mouse", "price":50, "weight":30}>  
  3.   
  4. <#-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,   
  5. 从这里我们也可以学到如何去调用一个类的方法 -->  
  6. <#assign keys = h?keys>    
  7.   
  8. <#-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 -->  
  9. <#list keys as key>${key} = ${h[key]}; </#list>  
<#-- 这里模拟了一个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>

 
输出结果:

Html代码 复制代码
  1. name = mouseprice = 50weight = 30;   
name = mouse; price = 50; weight = 30; 

 

第二招:如何判定字符串相等
      这个有点小题大作,呵呵,其实很简单

Html代码 复制代码
  1. <#-- 定义了一种动物——狗 -->  
  2. <#assign annimal = "Dog">  
  3.   
  4. <#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"   
  5. 注意:这里使用一个"="-->  
  6. <#if annimal = "Dog">  
  7. Wang! Wang!   
  8. <#else>  
  9. Ga! Ga!   
  10. </#if>  
<#-- 定义了一种动物——狗 -->
<#assign annimal = "Dog">

<#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
注意:这里使用一个"="-->
<#if annimal = "Dog">
Wang! Wang!
<#else>
Ga! Ga!
</#if>

 

输出结果:

Html代码 复制代码
  1. Wang! Wang!   
Wang! Wang! 

 

第三招:处理空值
      先要说明的是,在freemarker中,如果你试图去访问一个不存在的值(null),或者该值在访问时还没有被初始化,
那么它会毫不犹豫的抛给一个错误,并且立即终止模板的执行过程。为什么这么变态?

 

如何对付这样的情况?
答案:在它访问这个值失败的时候,给它一个默认的值!嘻嘻……

 

怎么赋默认值?
用这样的语法:
unsafe_expr!default_exprunsafe_expr!(unsafe_expr)!default_expr(unsafe_expr)!


例子:

Html代码 复制代码
  1. <#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"   
  2. 当然"!"后面的这个值可以是一个表达式-->  
  3. ${mouse!"No mouse."}   
  4.   
  5. <#-- 给mouse赋值 "Jerry" -->  
  6. <#assign mouse="Jerry">  
  7.   
  8. <#-- 再次访问mouse -->  
  9. ${mouse!"No mouse."}  
<#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
当然"!"后面的这个值可以是一个表达式-->
${mouse!"No mouse."}

<#-- 给mouse赋值 "Jerry" -->
<#assign mouse="Jerry">

<#-- 再次访问mouse -->
${mouse!"No mouse."}

 

输出结果:

Html代码 复制代码
  1. No mouse.   
  2. Jerry   
No mouse.
Jerry 

 

另外对于"!"后面没有写任何值的情况,那么它的值可能是空String、空sequence 、空hash。
但是如果你想默认值是0或者false,那么你最好还是显式的指定,因为它不会对你那么友好的(Bad luck!)

还需要注意的是:

Html代码 复制代码
  1. 1. product.color!"red"    
  2. 2. (product.color)!"red"    
  3.   
  4. 这两种写法所表示的含义是不一样的:   
  5. 第一种写法只处理color为空的情况,对于product为空则束手无策。   
  6. 第二种写法则可以同时处理product及color同时(或任意)为空的情况。  
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、回车、换行


例子:

Html代码 复制代码
  1. <#-- 定义test值为"Tom & Jerry" -->  
  2. <#assign test = "Tom & Jerry">  
  3. ${test?html}   
  4. ${test?upper_case?html}   
  5.   
  6. 输出为:   
  7. Tom & Jerry   
  8. TOM & JERRY   
<#-- 定义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)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值