Freemarker tips 博客分类: Java freemarker模板引擎
程序员文章站
2024-03-16 22:04:34
...
三目运算 –条件运算符
用freemarker时写三目运算,开始一直这样写,${true?3:4}, 不行,再换成: ${true?'3':'4'},汗,还是不行,然后想起freemarker输出字符串后面要带上?string,
所以又写上${true?'3'string:'4'string},汗,一样不行,最后问以前的同事(大名高登峰,未婚,嘎嘎),原来是这样写:
Java代码
1. ${true?string('5','7')}
Check null
<#if updatedTaxonomyItems??>
Do something if not null
</#if>
<#else>
Do something if null
</#else>
Use Default value if null
${updatedItem.parentNodeId!"NULL"}
关于得到list长度的问题
取得list的长度:${fields?size}。
而使用判断其长度的时候,
<#if fields?size>0 >
</#if>
竟抛出错了,说不是boolean类型,
Java backtrace for programmers:
----------
freemarker.core.NonBooleanException: Error on line 132, column 22 in viewEntity_js.ftl
Expecting a boolean (true/false) expression here
Expression fields?size does not evaluate to true/false
it is an instance of freemarker.template.SimpleNumber
at freemarker.core.Expression.isTrue(Expression.java:150)
晕,试了几下,原来加个刮号就没问题了。
<#if (fields?size>0) >
</#if>
关于Map
非常重要的一点,你的Map的key不能是一个自定义的Object,否则在map[key]时总会报map[key]的值为空的错。虽然没有看到官方文档说key不能是Object,但我的实践是不行,最终我该用Key为string,value 为List<ClassA>才work,虽然key不能是自定义的Object,但value可以是任意的object.
遍历Map,下面的例子是遍历Map<String, List<ClassA>> map类型的map,注意要使用map[key]来获取value, map.get(key)报错,当然有可能我碰到的错误跟Freemarker的版本有关,也许某些版本就没有这些问题。
关于自增长操作符
字符串列子
用freemarker时写三目运算,开始一直这样写,${true?3:4}, 不行,再换成: ${true?'3':'4'},汗,还是不行,然后想起freemarker输出字符串后面要带上?string,
所以又写上${true?'3'string:'4'string},汗,一样不行,最后问以前的同事(大名高登峰,未婚,嘎嘎),原来是这样写:
Java代码
1. ${true?string('5','7')}
Check null
<#if updatedTaxonomyItems??>
Do something if not null
</#if>
<#else>
Do something if null
</#else>
Use Default value if null
${updatedItem.parentNodeId!"NULL"}
关于得到list长度的问题
取得list的长度:${fields?size}。
而使用判断其长度的时候,
<#if fields?size>0 >
</#if>
竟抛出错了,说不是boolean类型,
Java backtrace for programmers:
----------
freemarker.core.NonBooleanException: Error on line 132, column 22 in viewEntity_js.ftl
Expecting a boolean (true/false) expression here
Expression fields?size does not evaluate to true/false
it is an instance of freemarker.template.SimpleNumber
at freemarker.core.Expression.isTrue(Expression.java:150)
晕,试了几下,原来加个刮号就没问题了。
<#if (fields?size>0) >
</#if>
关于Map
非常重要的一点,你的Map的key不能是一个自定义的Object,否则在map[key]时总会报map[key]的值为空的错。虽然没有看到官方文档说key不能是Object,但我的实践是不行,最终我该用Key为string,value 为List<ClassA>才work,虽然key不能是自定义的Object,但value可以是任意的object.
遍历Map,下面的例子是遍历Map<String, List<ClassA>> map类型的map,注意要使用map[key]来获取value, map.get(key)报错,当然有可能我碰到的错误跟Freemarker的版本有关,也许某些版本就没有这些问题。
<#if (latestAllocationsMap??)> <#list latestAllocationsMap?keys as key> <#assign allocations=latestAllocationsMap[key]> <#if (allocations?size>0) > <td align="left"> ${key?if_exists} <#list allocations as allocation> ${allocation.allocId?if_exists} </#list> </td> </#if> </#list> </#if>
关于自增长操作符
字符串列子
<#assign allocationId= ""> <#list allocations as allocation> <#assign allocationId= allocationId + " " + allocation.allocId> </#list>
上一篇: 浅析B-树分裂
下一篇: java中从键盘输入三个数字求最大值