1.引入bootstrap4的css样式
<link href=".3.1
/css/bootstrap.css" rel="stylesheet">
2.list
<#assign thingsList = sqlt.sqlQueryForList("List")>
<#list thingsList as l><div>${l.tid}--${l.type}--${l.content}</div>
</#list>
宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,
调用宏时,与使用FreeMarker的其他指令类似,只是使用@替代FTL标记中的#
<#macro greet><font size = "+2">Hello Alice!</font><span class="text-primary">aliceRachel</span>
</#macro>
<@greet></@greet>
<@greet/>
<#macro greet person><font size = "+2" class="text-danger">Hi~ ${person}</font>
</#macro>
<@greet person="Prime"></@greet>
<@greet person="kamma"/>
<#macro greet1 person1 color="green"><font size = "+2" color="${color}">This is a good day! ${person1}===</font></#macro>
<@greet1 person1="Fred"></@greet1>
<@greet1 person1="Batman"/>
macro可以有多个参数,参数的次序是无关的, 在macro指令中只能使用定义的参数,并且必须对所有参数赋值, 可以在定义参数时指定缺省值
<#macro border><table border=4 cellspacing=0 cellpadding =4><tr><td><#nested><#nested></td><td><#nested></td></tr></table>
</#macro>
<@border>The bordered text</@border>
<#macro do_thrice><#nested><#nested><#nested>
</#macro>
<@do_thrice>Beautiful</@do_thrice>
<#macro repeat count> <#local y = "test"> <#unt as x> ${y} ${count}/${x}: <#nested> </#list>
</#macro> <@repeat count=3>${y?default("?")} ${x?default("?")}
${count?default("?")}</@repeat>
nested指令也可以有循环变量(循环变量的含义见下节),调用宏的时候在宏指令的参数后面,分号隔开依次列出循环变量的名字,格式如下:
尖括号@ macro_name paramter list; loop variable list[,]尖括号
<#macro repeat count> <#unt as x> <#nested x, x/2, x==count> </#list>
</#macro> <@repeat count=4 ; c, halfc, last> ${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
name:指定的是该自定义指令的名字, 使用自定义指令时可以传入多个参数。 宏变量的名称,它不是表达式。和 顶层变量 的语法相同,比如 myMacro 或 my-macro
paramX:指定使用自定义指令时报参数, 使用该自定义指令时,必须为这些参数传入值 ( 局部变量 的名称,存储参数的值 (不是表达式),在 = 号后面和默认值(是表达式)是可选的。 默认值也可以是另外一个参数,比如 <#macro section title label=title>。参数名称和 顶层变量 的语法相同,所以有相同的特性和限制)
nested:输出使用自定义指令时的中间部分
nested指令中的循环变量:这此循环变量将由macro定义部分指定 ,传给使用标签的模板
return:可用于随时结束该自定义指令
基本格式:
<#macro name param1 param2 ... paramN>...<#nested loopvar1, loopvar2, ..., loopvarN>...<#return>...
</#macro>
return 和 nested 指令是可选的,而且可以在 <#macro ...> 和 </#macro>
之间被用在任意位置和任意次数。
<#macro test foo bar ="Bar" baaz=-1>Test and params: ${foo}, ${bar}, ${baaz}
</#macro>
<@test foo="a" bar="b" baaz=5*5-2 />
<#-- Test and params: a, b, 23 -->
<@test foo="a" bar="b" />
<#-- Test and params: a, b, -1 -->
<@test foo="a" baaz=5*5-2 />
<#-- Test and params: a, Bar, 23 -->
<@test foo="a" />
<#-- Test and params: a, Bar, -1 -->
<#macro list title items><p>${title?cap_first}</p><p>${title?capitalize}</p><ul><#list items as x><li>${x?cap_first}</li></#list></ul>
</#macro>
<@list items=["mouse","elephant","python"] title="animals" />
<div><#macro test><font color="blue">没有参数的macro</font></#macro><@test />
</div>
<div><#macro test1 params1 params2><font color="red">有参数的macro,params1=${params1},params2=${params2}</font></#macro><@test1 params1="java" params2="freemarker"/>
</div>
<div><#macro test2 params1 params2="python"><font color="grey">有参数默认值的macro,params1=${params1},params2=${params2}</font></#macro><br><@test2 params1="alice" params2="prime" /><br><@test2 params1="alice" />
</div>
<div><#macro test3 params1 params2="python" ><font color="green">有多个参数的macro,params1=${params1},params2=${params2}</font><br><font color="blue">${paramExt['params3']}</font></#macro><@test3 params1="alice" params2="prime" params3="javascript" params4="element"/>
</div>
<#-- 嵌套宏 -->
<#macro border><table border="1"><#nested><#nested><#nested></table>
</#macro><#-- 嵌套宏使用 -->
<@border><tr><td>hahaha</td></tr>
</@border>
<#-- 嵌套宏 -->
<#macro border><table border="1"><#nested><#nested><#nested></table>
</#macro><#-- 嵌套宏使用 -->
<@border><tr><td>中国</td><td>辽宁省</td><td>大连市</td></tr>
</@border>
<#-- 循环嵌套宏 -->
<#macro repeat count><#unt as x><#-- 使用nested指令时指定了三个循环变量 --><#nested x, x/2, x==count> </#list>
</#macro><#-- 使用宏 -->
<@repeat count = 4; c, halfc, last>${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
macro_copy.ftl 中内容为(以下):
<#-- common.ftl 将一个HTML页面模板定义成一个page指令,则可以在其他页面中如此page指令 -->
<#macro page title>
<html>
<head><title>FreeMarker示例页面 - ${title}</title>
</head>
<body><h1>${title}</h1><#nested><#-- //用于引入用户自定义指令的标签体 -->
</body>
</html>
</#macro>
在本文件中进行引入:
<#-- 引用自定义的page指令 -->
<#-- 对应macro_copy.ftl使用 -->
<#import "macro_copy.ftl" as com>
<#-- macro定义输出html的自定义指令 -->
<#-- 引用自定义的page指令 -->
<#-- 对应macro_copy.ftl使用 -->
<#import "macro_copy.ftl" as com>
<@com.page title="book list">
<u1>
<li>spring</li>
<li>j2ee</li>
</ul>
</@com.page>
<p>1. macro是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量。
</p>
<p>2. 在macro进行自定义指令中可以在宏变量之后定义参数,调用宏时,与使用FreeMarker的其他指令类似,只是使用@替代FTL标记中的#。
</p>
1)nested指令 是可选的,可以在#macro>
<#macro tag> <#nested/>
</#macro>
<@tag> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>
</@tag>
构建函数,求平均值
<#function > <#local sum = 0> <#list nums as num> <#local sum = sum + num> </#list> <#if nums?size != 0> <#return sum / nums?size> </#if>
</#function>
<#-- 15 -->
<span style="color:green;font-size:2rem">${avg(10, 20)}</span>
<#-- 25 -->
<span style="color:blue;font-size:2rem">${avg(10, 20, 30, 40)} </span>
<#-- N/A -->
<span style="color:pink;font-size:2rem">${avg()!"N/A"} </span>
<#macro border><table border=4 cellspacing=0 cellpadding=4><tr><td><#nested></tr></td></table>
</#macro>
<#macro greet person color="pink"><font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
<#macro do_thrice><#nested><#nested><#nested>
</#macro><@border><ul><@do_thrice><li><@greet person="Joe"/></@do_thrice></ul>
</@border>
因为 y, x 和 count 是宏的局部(私有)变量,从宏外部定义是不可见的。 此外不同的局部变量的设置是为每个宏自己调用的,所以不会导致混乱
<#macro repeat count><#local y = "test"><#unt as x>${y} ${count}/${x}: <#nested><br></#list>
</#macro>
<@repeat count=3>${y!"?"} ${x!"?"} ${count!"?"}</@repeat>
<#macro test foo>${foo} (<#nested>) ${foo}</#macro>
<@test foo="A"><@test foo="B"><@test foo="C"/></@test></@test>
<#macro do_thrice><#nested 1><#nested 2><#nested 3>
</#macro>
<@do_thrice ; x> <#-- user-defined directive uses ";" instead of "as" -->${x} Anything.
</@do_thrice>
<#list ["red", "green", "blue"] as color>${color?upper_case}</#list>
本文发布于:2024-02-04 17:06:47,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170712342957646.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |