网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  freemarker设计指南(4) (完)     
  文章作者:未知  文章来源:水木森林  
  查看:95次  录入:管理员--2007-11-17  
 

4、杂项

1)用户定义指令

l         宏和变换器变量是两种不同类型的用户定义指令,它们之间的区别是宏是在模板中使用macro指令定义,而变换器是在模板外由程序定义,这里只介绍宏

l         基本用法

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

<#macro greet>
  <font size="+2">hello joe!</font>
</#macro>  

Ø         作为用户定义指令使用宏变量时,使用@替代ftl标记中的#

<@greet></@greet>

Ø         如果没有体内容,也可以使用:

<@greet/>

l         参数

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

<#macro greet person>
  <font size="+2">hello ${person}!</font>
</#macro> 

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

<@greet person="fred"/> and <@greet person="batman"/> 

输出结果是:

  <font size="+2">hello fred!</font>
 and   <font size="+2">hello batman!</font>
   

Ø         宏的参数是ftl表达式,所以下面的代码具有不同的意思:

<@greet person=fred/>

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

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

<#macro greet person color>
  <font size="+2" color="${color}">hello ${person}!</font>
</#macro> 

Ø         可以这样使用该宏变量:

<@greet person="fred" color="black"/> 

Ø         其中参数的次序是无关的,因此下面是等价的:

<@greet color="black" person="fred"/>

Ø         只能使用在macro指令中定义的参数,并且对所有参数赋值,所以下面的代码是错误的:

<@greet person="fred" color="black" background="green"/>
<@greet person="fred"/>

Ø         可以在定义参数时指定缺省值,如:

<#macro greet person color="black">
  <font size="+2" color="${color}">hello ${person}!</font>
</#macro>  

Ø         这样<@greet person="fred"/>就正确了

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

l         嵌套内容

Ø         用户定义指令可以有嵌套内容,使用<#nested>指令执行指令开始和结束标记之间的模板片断

Ø         例子:

<#macro border>
  <table border=4 cellspacing=0 cellpadding=4><tr><td>
    <#nested>
  </tr></td></table>
</#macro>  

这样使用该宏变量:

<@border>the bordered text</@border>

输出结果:

  <table border=4 cellspacing=0 cellpadding=4><tr><td>
    the bordered text
  </tr></td></table>
  

Ø         <#nested>指令可以被多次调用,例如:

<#macro do_thrice>
  <#nested>
  <#nested>
  <#nested>
</#macro>
<@do_thrice>
  anything.
</@do_thrice>  

输出结果:

  anything.
  anything.
  anything. 

Ø         嵌套内容可以是有效的ftl,下面是一个有些复杂的例子:

<@border>
  <ul>
  <@do_thrice>
    <li><@greet person="joe"/>
  </@do_thrice>
  </ul>
</@border> 

输出结果:

  <table border=4 cellspacing=0 cellpadding=4><tr><td>
      <ul>
    <li><font size="+2">hello joe!</font>
 
    <li><font size="+2">hello joe!</font>
 
    <li><font size="+2">hello joe!</font>
 
  </ul>
 
  </tr></td></table>  

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

<#macro repeat count>
  <#local y = "test">
  <#list 1..count as x>
    ${y} ${count}/${x}: <#nested>
  </#list>
</#macro>
<@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat>

输出结果:

    test 3/1: ? ? ?
    test 3/2: ? ? ?
    test 3/3: ? ? ?

Ø          

l         在宏定义中使用循环变量

福建JSP技术网 -->

 
 
上一篇: 如何在一个系统中设计权限控制机制(3)    下一篇: 利用jconfig获取xml文件中的配置信息
  相关文档
think in java读书笔记 11-17
string和stringbuffer类字符串的区别 11-17
开发eclipse下的自定义控件 11-17
something about listeners 11-17
final数据 11-17
spring+hibernate+struts优势地位凸显 11-16
java编写tcp方式的通信程序 11-17
在运行时将大图分割为小图片数组 11-17
用swing组件实现登录对话框 11-17
实战java多线程编程精要之实现线程 11-16
openastextstream 方法 11-16
详细介绍在tomcat中配置数据源原理 11-17
appfuse中使用clob类型 11-17
java程序员必读:基础篇(2.a)语言基础 11-17
ejb 自管理的事务 11-16
常用java方法 11-17
java线程入门——什么是线程 11-17
java开发中的线程安全选择与swing[z] 11-17
实现高效java编程规范的十一条基础规则 11-16
jakarta-cactus-12-1.7.1.zip 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息