阅读更多
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}
#list>
5.集合长度判断
<#if student?size != 0>#if> 判断=的时候,注意只要一个=符号,而不是==
6.宏/模板
定义:
<#macro 名称 参数1 参数2 参数3=“默认值”>
#macro>
初步了解: 使用更像一个闭包,可以定义后,在脚本中任意地方引用,并原地起作用
<#macro greet>
Hello Joe!
#macro>
使用的方式为:
<@greet>@greet>
宏的参数定义,类似js,在宏名后 带参数进行传递定义
<#macro greet person color>
${person}
#macro>
调用带参数时,注意使用类似XML的属性格式进行传递,不需要关心顺序问题
<@greet person="Fred" color="black"/>
参数默认值定义,如果没有,就必须要求传递完整的参数列表
<#macro greet person color="black">
Hello ${person}!
#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
”)?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的值必须是布尔类型。