freemarker高级用法

本文深入探讨了Freemarker模板引擎中的高级功能,包括宏解析、动态指令执行、对象创建、条件判断、字符串操作等核心知识点。通过实际代码示例,详细解析了`?interpret`、`?new`、`!!`与`??`等关键符号的用法,以及如何灵活运用模板中的`repeat`、`include`和`list`指令进行高效数据处理。此外,还介绍了模板中如何实现字符串转换为数字、动态模板参数传递、以及通配符`*`的使用场景,旨在帮助开发者掌握Freemarker模板引擎的高级应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1, ?interpret 
能够将文本的值解析为宏,类似动态指令用法如下 
<#assign x=["a", "b", "c"]> 
<#assign templateSource = "<#list x as y>${y}</#list>"> 
<#assign inlineTemplate = templateSource?interpret> 
<@inlineTemplate />  

其中"<#list x as y>${y}</#list>"可以是从数据库中读取出来的文本型指令,方便动态执行指令 


2, ?new 
模版里创建一个java对象,而不是传入进去的 
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new()> 
还可以在new的时候加参数,如 
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new(40)> 

3, !!和?? 
两个简写符号,可以让我偷电缆(偷点懒) 
${obj.name!!}  =  ${obj.name?default('')} 
<#if obj?? >   =  <#if obj?exists> 
单独一个"!"是什么意思? 相当于default,即有下面的写法 
${item.name?default("no name")} 
等于 
${item.name!"no name"} 
甚至可以组合起来判断某个值为空时,显示另一个的值,如 
${item.name!(item.title!!)} 


4, ; in macro 和 nest的参数 
我原本以为<#nest/>不能加参数,在构造模板时费了一些劲,后来才发现是可以用";"在引用macro时给nest传参数 

<@repeat count=4 ; c, halfc, last>
  ${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
<@repeat count=4 ; c, halfc>
  ${c}. ${halfc}
</@repeat>
<@repeat count=4>
  Just repeat it...
</@repeat>  

5, include里的通配符* 
好像可以应对不固定文件夹层级路径的写法,但具体没用过 
<#include "*/footer.ftl">   
匹配如下 
/foo/bar/footer.ftl 
/foo/footer.ftl 
/footer.ftl 
按从上到下,最先匹配的最先导入。 

6    字符串转换为数字
<#assign width="234"/>
<#assign widthNum=width?eval/>

7  split字符串

<#assign arr = o[2]?split(',')>
            <#list arr as a>
            <@selArea selName="select1" selId="select1" selvalue=(a?eval) userArea=1010 />
            </#list>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值