四、模版指令操作
一、 复杂模版中指令混合使用
1、时间转换:yyyy-MM-dd HH:mm: ss(datetime) yyyy-MM-dd(date) HH:mm: ss(time) 例:${list. createDate? Time}
2、集合操作:循环迭代 <#list list.info as user> <#user.name> <#if user? has_next>, </#if> </#list> <#list list.info as user> <#user.name> <#seq>; </#list>
3、集合操作:判断是否存在、内容大小 <#if list??> //判断list是否存在? </#if > <#if list??&&0 lt list? size> //判断是否存在?0小于集合 </#if > <#if list? has_content> //判断是否存在,list内容是否为空 </#if >
4、数据展示操作:判断数据内容进行格式化输出 ${list. master? strng(‘管理员’,’访客’)} true、false ${list. createDate? string(yyyy-MM-dd)}
![](https://images2015.cnblogs.com/blog/897287/201606/897287-20160617150253182-245802577.png)
二、 宏定义编写
1、处理很长的字符串,省略后部分!描述太长了,html展示不好看
![](https://images2015.cnblogs.com/blog/897287/201606/897287-20160617150406682-494705899.png)
解决方法:1、编写宏:数据text、长度length …后面参数可多个!2、调用宏:<@cut text=list. note length=20>
<#macro cut text length append='...'>
<#if text? length gt length>
${text? substring (0, length)} ${append!}
<#else>
${text!}
</#if>
</#macro>
处理后:
代码:嵌入在同一个ftl页面模版中,代码太多!怎么办??????????
解决:在通过定义外部的tools.ftl直接引入进来
1、命令空间、定义变量
自动引入外部的ftl<prop key="auto_include">tools.ftl</prop>
缺点:如果有多个ftl自动引入,多个ftl中的宏定义方法名一模一样引起冲突!
解决使用:<prop key="auto_import">tools.ftl as t</prop>
使用宏:<@t.cut text=test. note length=20/>
常量定义:<#assign ***="">
<#assign http1="http://www.baidu.com"/>
<#assign http2="http://www.baidu.com"/>
<#assign http3="http://www.baidu.com"/>
<#assign http4="http://www.baidu.com"/>
常量使用:
${t.http1}<a href="${t.http1}">到百度去</a>
三、 Java扩展指令编写、配置使用
1、编写自定义指令:implements TemplateDirectiveModel
![](https://images2015.cnblogs.com/blog/897287/201606/897287-20160617151823495-1548502069.png)
2、在springMVC.xml文件freemarkerVariables中配置该指令
<bean id="MyDirective1" class="com.freemarker.Controller.MyDirective1"/>
<entry key="MyDirective1" value-ref="MyDirective1" />
3、 调用指令,在ftl模版是使用
<@MyDirective1>${info}</@MyDirective1>
四、 Java扩展方法编写、配置使用
1、 编写指令方法:implements TemplateMethodModelEx
2、 在springMVC.xml文件freemarkerVariables中配置该指方法
<bean id="MyMethod1" class="com.freemarker.Controller.MyMethod1"></bean>
<entry key="MyMethod1" value-ref="MyMethod1" />
3、调用指令方法,在ftl模版是使用
${MyMethod1()}
4、带参数的自定义方法
5、 调用
${MyMethod1("测试")}
=========> 支持的数据类型