FreeMarkermacro宏的使用.docx

上传人:b****2 文档编号:2054529 上传时间:2022-10-26 格式:DOCX 页数:9 大小:73.67KB
下载 相关 举报
FreeMarkermacro宏的使用.docx_第1页
第1页 / 共9页
FreeMarkermacro宏的使用.docx_第2页
第2页 / 共9页
FreeMarkermacro宏的使用.docx_第3页
第3页 / 共9页
FreeMarkermacro宏的使用.docx_第4页
第4页 / 共9页
FreeMarkermacro宏的使用.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

FreeMarkermacro宏的使用.docx

《FreeMarkermacro宏的使用.docx》由会员分享,可在线阅读,更多相关《FreeMarkermacro宏的使用.docx(9页珍藏版)》请在冰豆网上搜索。

FreeMarkermacro宏的使用.docx

FreeMarkermacro宏的使用

FreeMarker-macro(宏)的使用

FreeMarkermacro(宏)的使用.txt14热情是一种巨大的力量,从心灵内部迸发而出,激励我们发挥出无穷的智慧和活力;热情是一根强大的支柱,无论面临怎样的困境,总能催生我们乐观的斗志和顽强的毅力……没有热情,生命的天空就没的色彩。

FreeMarkermacro(宏)的使用

有人说用freemarker,但没有用到它的宏(macro),就=没有真正用过freemarker。

说的就是宏是freemarker的一大特色。

宏的定义可以查看相关的文档,里面介绍得很清楚,下面来看看它的一个用法(javaeye帖子里有讨论)。

/WEB-INF/template/common/common.ftl:

<#macrohtmltitle>

${title}

<#nested/>

然后在freemarker.properties里定义:

auto_import=/WEB-INF/template/common/common.ftlasc

然后其他的ftl文件就可以使用它了

test.ftl:

<@c.htmltitle="OA">

你的内容

如果不在freemarker.properties里定义,可以在每个文件里包含这个ftl:

<#import"/WEB-INF/template/common/common.ftl"asc>

不同的场合有不同的运用。

使用得好的话,将会大大节省你的开发时间。

 

macro,nested,return

语法

<#macronameparam1param2...paramN>

...

<#nestedloopvar1,loopvar2,...,loopvarN>

...

<#return>

...

用例

<#macrotestfoobar="Bar"baaz=-1>

Testtext,andtheparams:

${foo},${bar},${baaz}

<@testfoo="a"bar="b"baaz=5*5-2/>

<@testfoo="a"bar="b"/>

<@testfoo="a"baaz=5*5-2/>

<@testfoo="a"/>

输出

Testtext,andtheparams:

a,b,23

Testtext,andtheparams:

a,b,-1

Testtext,andtheparams:

a,Bar,23

Testtext,andtheparams:

a,Bar,-1

定义循环输出的宏

<#macrolisttitleitems>

${title?

cap_first}:

    <#listitemsasx>

  • ${x?

    cap_first}

<@listitems=["mouse","elephant","python"]title="Animals"/>

输出结果

Animals:

  • Mouse

  • Elephant

  • Python

包含body的宏

<#macrorepeatcount>

<#list1..countasx>

<#nestedx,x/2,x==count>

<@repeatcount=4;chalfclast>

${c}.${halfc}<#iflast>Last!

输出

1.0.5

2.1

3.1.5

4.2Last!

 

--------------------------------------------------------------------------------

注意在使用的时候:

别忘了双引号。

<#import"/pagelibs/book.ftl"asbook>

<@workorder.pricevalue="${book.price}"/>

 

宏Macro

宏是在模板中使用macro指令定义

l.1基本用法

宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子:

<#macrogreet>HelloJoe!

调用宏时,与使用FreeMarker的其他指令类似,只是使用@替代FTL标记中的#。

<@greet><#--<@greet/>-->

在macro指令中可以在宏变量之后定义参数,如:

<#macrogreetperson>Hello${person}!

可以这样使用这个宏变量:

<@greetperson="Fred"/>

但是下面的代码具有不同的意思:

<@greetperson=Fred/>

这意味着将Fred变量的值传给person参数,该值不仅是字符串,还可以是其它类型,甚至是复杂的表达式。

宏可以有多参数,下面是一个例子:

<#macrogreetpersoncolor>Hello${person}!

可以这样使用该宏变量,其中参数的次序是无关的:

<@greetperson="Fred"color="black"/>

可以在定义参数时指定缺省值,否则,在调用宏的时候,必须对所有参数赋值:

<#macrogreetpersoncolor="black">Hello${person}!

注意:

宏的参数是局部变量,只能在宏定义中有效。

嵌套内容

FreeMarker的宏可以有嵌套内容,<#nested>指令会执行宏调用指令开始和结束标记之间的模板片断,举一个简单的例子:

<#macroborder><#nested>

执行宏调用:

<@border>Theborderedtext

输出结果:

Theborderedtext

<#nested>指令可以被多次调用,每次都会执行相同的内容。

<#macrodo_thrice><#nested><#nested><#nested><@do_thrice>Anything.

FMPP输出结果:

Anything.Anything.Anything.

嵌套内容可以是有效的FTL,下面是一个有些复杂的例子,我们将上面三个宏组合起来:

<@border>

    <@do_thrice>
  • <@greetperson="Joe"/>

输出结果:

  • HelloJoe!

  • HelloJoe!

  • HelloJoe!

宏定义中的局部变量对嵌套内容是不可见的,例如:

<#macrorepeatcount><#localy="test"><#list1..countasx>${y}${count}/${x}:

<#nested><@repeatcount=3>${y?

default("?

")}${x?

default("?

")}${count?

default("?

")}

输出结果:

test3/1:

?

?

?

test3/2:

?

?

?

test3/3:

?

?

?

在宏定义中使用循环变量

nestted指令也可以有循环变量(循环变量的含义见下节),调用宏的时候在宏指令的参数后面依次列出循环变量的名字,格式如下:

<@macro_nameparamterlist;loopvariablelist[,]>

例如:

<#macrorepeatcount><#list1..countasx><#nestedx,x/2,x==count><@repeatcount=4;c,halfc,last>${c}.${halfc}<#iflast>Last!

这里count是宏的参数,c,halfc,last则为循环变量,输出结果:

1.0.52.13.1.54.2Last!

循环变量和宏标记指定的不同不会有问题,如果调用时少指定了循环变量,那么多余的值不可见。

调用时多指定了循环变量,多余的循环变量不会被创建:

<@repeatcount=4;c,halfc,last>${c}.${halfc}<#iflast>Last!

<@repeatcount=4;c,halfc>${c}.${halfc}<@repeatcount=4>Justrepeatit...

在模板中定义变量

在模板中定义的变量有三种类型:

plain变量:

可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换。

局部变量:

在宏定义体中有效,使用local指令创建和替换。

循环变量:

只能存在于指令的嵌套内容,由指令(如list)自动创建;宏的参数是局部变量,而不是循环变量

局部变量隐藏(而不是覆盖)同名的plain变量;循

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1