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}<br/>
</#list>

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

</#macro>

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

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

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

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

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)!>  </#escape> 主要使用在相似的字符串变量输出,比如某一个模块的所有字符串输出都必须是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" />
......代码等
  
</#compress>
</#escape>


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 </#assign> or <#assign name in namespacehash>  capture this </#assign>
用例
生成变量,并且给变量赋值 给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 />
   </#list>
</#assign>
Number of words: ${x?word_list?size} ${x} 

<#assign x>Hello ${user}!</#assign> 

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

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

注意:assign 不可以赋值为null


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

判断对象是不是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的值必须是布尔类型。

猜你喜欢

转载自gjp014.iteye.com/blog/2384365