freemarker学习笔记

    技术2025-11-08  15

     freemarker指令:<#xxx>自定义指令<@xxx>转换${1.1?int}${aa?c}作用把String转换为数字,因为freemarker默认的会采用科学计数法,比如1,000,000html:对字符串进行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代码 {"name":"mouse", "price":50 , "weight":30}   {"name":"mouse", "price":50 , "weight":30}

     如何来迭代输出?

    Html代码 <#-- 这里模拟了一个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>   <#-- 这里模拟了一个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代码 name = mouseprice = 50weight = 30;    name = mouse; price = 50; weight = 30;

     

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

    Html代码 <#-- 定义了一种动物——狗 -->  <#assign annimal = "Dog">    <#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"   注意:这里使用一个"="-->  <#if annimal = "Dog">  Wang! Wang!   <#else>  Ga! Ga!   </#if>   <#-- 定义了一种动物——狗 --> <#assign annimal = "Dog"> <#-- 做一下条件判断,如果是狗就输出"Wang! Wang!" 注意:这里使用一个"="--> <#if annimal = "Dog"> Wang! Wang! <#else> Ga! Ga! </#if>

     

    输出结果:

    Html代码 Wang! Wang!    Wang! Wang!

     

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

     

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

     

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

    例子:

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

     

    输出结果:

    Html代码 No mouse.   Jerry    No mouse. Jerry

     

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

    还需要注意的是:

    Html代码 1. product.color!"red"    2. (product.color)!"red"      这两种写法所表示的含义是不一样的:   第一种写法只处理color为空的情况,对于product为空则束手无策。   第二种写法则可以同时处理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代码 <#-- 定义test值为"Tom & Jerry" -->  <#assign test = "Tom & Jerry">  ${test?html}   ${test?upper_case?html}     输出为:   Tom & Jerry   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)