zoukankan      html  css  js  c++  java
  • Velocity(9)——宏

    定义宏和使用宏

    #macro指令用于定义一个VTL模板的重复代码块——宏。下面是一个简单的定义宏的例子:

    #macro( d )
    <tr><td></td><tr>
    #end

    这段代码定义了一个宏,名字为d,没有参数。下面是使用这个宏的代码:

    #d()

    Velocity在遇到#d()的时候,会用"<tr><td></td></tr>"替代上面的#d()这一行。

    宏的参数:

    宏也可以带参数,而且是任意多个参数。不过,宏定义时有几个参数,宏调用时就要提供同样数目的参数。

    #macro( d $name)
        <tr><td>$name</td></tr>
    #end
    #d("name1")

    宏的参数可以是以下VTL元素中的任意一种:引用、字符串字面值、数值字面值、整数范围(比如[1 .. 10]、[$start .. $end])、数组、布尔值true或者false。

    宏的参数可以是方法,那么下面这个例子,需要特别注意:

    #macro(test $a)
        $a $a $a
    #end
    
    #test($foo.bar())

    上面这个例子中,$foo.bar()将会被调用3次,而不是一次。

    内联的宏

    当宏是在一个Velocity模板中定义时,这个宏(是inline的)只能被该模板使用,同一个网站下的其他模板是不能用的。如果是在一个Velocity宏模板库中定义的宏,就可以被任何同一网站下的模板使用。

    和宏有关的一些Velocity属性

    velocimacro.library——用逗号分隔的一组文件名,是Velocity宏模板库。默认值是VM_global_library.vm

    velocimacro.permissions.allow.inline——宏是否可以在一个普通模板中定义。默认值是false。

    velocimacro.permissions.allow.inline.to.replace.global——是否允许模板中的宏覆盖library中的宏。默认值是false。

    velocimacro.permissions.allow.inline.local.scope——一个在普通模板中定义的宏,是否允许其他模板使用。默认是false。

    velocimacro.context.localscope——在一个宏里通过#set()修改了context,此修改是否仅仅对这个宏自身,而不是永久性修改了context。默认值是false。

    velocimacro.library.autoreload——Velocity宏模板库修改之后,是否自动重新加载。默认值是false。debug时可以设置为true,发布时设置为false。

    其他一些注意点

    宏必须在第一次使用它之前定义。当#Parse()一个模板文件时,尤其要注意这一点。

  • 相关阅读:
    xmgrace的配置
    redhat 的安装及grub livecd 的引导
    AutoDock 的安装及 virtual screening 的配置
    怎么查看redhat版本
    分子模拟软件schrodinger的安装
    Amber学习第八天:含有配体的蛋白分子动力学
    Amber 模拟蛋白流程
    Openbabel的安装
    Amber 的安装
    浅谈SQL Server 对于内存的管理
  • 原文地址:https://www.cnblogs.com/faunjoe88/p/5888293.html
Copyright © 2011-2022 走看看