freemarker

阅读更多
1.在使用freemarker 编程时,如果给变量赋值对象为null时,就会出现在异常
如:<#assign selfname = ProductHelper.getAddProductSelfAddressRel(book.id) />
当 ProductHelper.getAddProductSelfAddressRel(book.id) 返回值为null时,出现异常
ProductHelper.getAddProductSelfAddressRel(book.id) is undefined.
It cannot be assigned to selfname

如何处理呢:
修改方1:
<#assign selfname = ProductHelper.getAddProductSelfAddressRel(book.id)! />
这样selfname 就为空('')

修改方2,设置默认值:
<#assign selfname = ProductHelper.getAddProductSelfAddressRel(book.id)!'0' />
这样selfname 就为字符0


修改方3,判断使用“??”值是否为空:
<#assign selfname = ProductHelper.getAddProductSelfAddressRel(book.id)?? />


2.使用list变量时,使用is_exists方法判断一下
<#foreach common in commonList?if_exists>

3.数字格式化插值:#{expr}或#{expr;format}
${book.name?if_exists } //用于判断如果存在,就输出这个值
${book.name?default(‘xxx’)}//默认值xxx
${book.name!"xxx"}//默认值xxx
${book.date?string('yyyy-MM-dd')} //日期格式
${book?string.number} 20 //三种不同的数字格式
${book?string.currency}--<#-- $20.00 -->
${book?string.percent}—<#-- 20% -->

4.循环读取集合: 注意/的使用
<#list student as stu>
${stu}



5.集合长度判断
<#if student?size != 0> 判断=的时候,注意只要一个=符号,而不是==
6.宏/模板
定义:
<#macro 名称 参数1 参数2 参数3=“默认值”>



初步了解: 使用更像一个闭包,可以定义后,在脚本中任意地方引用,并原地起作用
<#macro greet>
Hello Joe!

使用的方式为:
<@greet>

宏的参数定义,类似js,在宏名后 带参数进行传递定义
<#macro greet person color>
${person}


调用带参数时,注意使用类似XML的属性格式进行传递,不需要关心顺序问题
<@greet person="Fred" color="black"/>

参数默认值定义,如果没有,就必须要求传递完整的参数列表
<#macro greet person color="black">
Hello ${person}!


7引入文件:

如:lib/boce.ftl文件中引入 my_test.ftl文件
<#import "/lib/my_test.ftl" as my>
<#assign mail="[email protected]">


<@my.copyright date="1000-2202"/>
${my.mail}
${mail}

8.
<#escape x as (x)!>  主要使用在相似的字符串变量输出,比如某一个模块的所有字符串输出都必须是html安全的,这个时候就可以使用该表达式 <#escape x as x?html>

<#compress> <#/compress> :用来压缩空白空间和空白的行
例如:
<#escape x as (x)!>
<#compress>
<@include_page path="/jsp/pub/init.jsp"/>

<#import "/ftl_lib/common/wenan_lib.ftl" as wenan>
<#assign Cache = freeMarkerBean.getBean("com.aebiz.plugin.cache.basic.Cache") />
<#assign cateType="hxg81505" />
......代码等
  




9 assign
语法
<#assign name=value> or <#assign name1=value1 name2=value2 ... nameN=valueN> or <#assign same as above... in namespacehash> or <#assign name>  capture this or <#assign name in namespacehash>  capture this
用例
生成变量,并且给变量赋值 给seasons赋予序列值 <#assign seasons = ["winter", "spring", "summer", "autumn"]>   给变量test加1 <#assign test = test + 1>   给my namespage 赋予一个变量bgColor,
下面可以通过my.bgColor来访问这个变量
<#import "/mylib.ftl" as my>
<#assign bgColor="red" in my>
  将一段输出的文本作为变量保存在x里 下面的阴影部分输出的文本将被赋值给x
<#assign x> 
    <#list 1..3 as n>   
       ${n}
       <@myMacro />
  

Number of words: ${x?word_list?size} ${x} 

<#assign x>Hello ${user}! 

   error <#assign x=” Hello ${user}!”>  

      true   同时也支持中文赋值,
如: <#assign 语法>  java
${语法} 打印输出: java

注意:assign 不可以赋值为null


10:
数字循环
1..5 表示从1到5,原型number..number
对浮点取整数
${123.23?int} 输出123
给变量默认值
${var?default(“hello world
”)?html}如果var is null那么将会被hello world
替代

判断对象是不是null
    <#if mouse?exists>

       Mouse found <#else> 也可以直接${mouse?if_exists})输出布尔形

11:
直接调用java对象的方法
${object.methed(args)}

12:
使用${}或#{}在文本部分插入表达式的值,
例如:
${"hello${username}!"}
${"${username}${username}${username}"}

也可以使用+来获得同样的结果:
${"hello"+username+"!"}
${username+username+username}

注意:${}只能用于文本部分而不能出现于标记内。

<#if ${user.login}>或<#if "${user.login}">都是错误的;
<#if user.login>是正确的。
本例中user.login的值必须是布尔类型。

你可能感兴趣的:(freemarker)