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()一个模板文件时,尤其要注意这一点。

时间: 2024-10-16 08:06:12

Velocity(9)——宏的相关文章

velocity的宏

velocity中的宏macro的使用当中,由于velocity会将宏加载到tomcat中去,但是如果修改之后再加载的话velocity发现有了相同的宏名称,则不会加载 所以这时候的问题就是,在页面上不会显示修改的内容. 如果要遇到这样的问题的话,如我要修改宏里面的东西,之后刷新页面却发现页面没有变化 上边的原理已经讲清楚了,所以我们只需要将宏的名称修改一下就能加载近来了! velocity的开发团队真坑,自己也已经不用这个了,也不更新了,就不说说这样的问题,都至少5年了. 没猜错的话,free

Velocity宏定义的坑与解决办法

使用Velocity,当然就免不了要使用宏,或者说使用Velocity而不使用其宏,就相当于废了Velocity一半以上的武功,非常可惜的.  怎么使用Velocity的宏呢,才最大程度的发挥其作用但是又避免掉入其中的坑呢?且听悠然乱弹乱弹: 官方文档中,关于Macro是这么说的: #macro - Allows users to define a Velocimacro (VM), a repeated segment of a VTL template, as required Format

《Velocity java开发指南》中文版(下)转载

文章出自:http://sakyone.iteye.com/blog/524292 8.Application Attributes Application Attributes (应用程序属性)是和VelocityEngine 的运行时实例(Runtimeinstance)相关联的,名-值对(name-value pairs)格式的参数,可用来存运RuntimeInstance时的信息. 设计这个功能的目标是Velocity程序需要与应用层或用户定制部分(如日志,资源,装载器等)通信. The

Velocity Macro

1 #macro(formatIncreaseData $increase) 2 #if(${product.onlineStatusFlag} =='0') 3 -- 4 #elseif(!$increase || $increase=="") 5 -- 6 #else 7 #if($increase >= 0) 8 #set($color = "increase-number") 9 #elseif($increase < 0) 10 #set($c

velocity.properties配置说明

1.Runtime  Log runtime.log  =  velocity.log 用以指定 Velocity 运行时日志文件的路劲和日志文件名,如不是全限定的绝对路径,系统会认为想对于 当前目录. runtime.log.logsystem 这个参数没有默认值,它可指定一个实现了 interface org.apache.velocity.runtime.log.LogSystem.的自定义日志处理对象给 Velocity.这就方便将 Velocity  与你己有系统的日志机制统一起来 r

Velocity(5)——#macro 指令

1 #macro(formatIncreaseData $increase) 2 #if(${product.onlineStatusFlag} =='0') 3 -- 4 #elseif(!$increase || $increase=="") 5 -- 6 #else 7 #if($increase >= 0) 8 #set($color = "increase-number") 9 #elseif($increase < 0) 10 #set($c

velocity 数字分割宏

velocity 数字格式化处理 #macro(numSplit $num $digits) #set($nums = "$!{num}.0") #set($arr = $nums.split("\.")) #set($int = $arr[0]) #set($digit = $arr[1]) #set($pad = $digits - $digit.length()) #if($pad > 0) #foreach($i in [1..$pad]) #set(

使用 Velocity 模板引擎快速生成代码

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点.但是在实际应用过程中,Velocity 又不仅仅被用在了 MVC 的架构中. Velocity 模板引擎介绍 在现今的软

velocity基本语法

一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclude.#parse.#macro等: 如: #if($info.imgs) <img src="$info.imgs" border=0> #else <img src="noPhoto.jpg"> #end 2."$"用来标识一个对象(或理解为变量):如