`
sailing04
  • 浏览: 61187 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

velocity宏

阅读更多
#macro脚本元素允许模版设计者定义一段可以重复使用的VTL片断。不论简单的还是复杂的情况,Velocity宏都很有用。作为一个介绍Velocity宏的入门例子,下面的一段Velocity宏只有唯一的目的,就是减少打字的个数和可能发生的打字的错误。
#macro( d ) <tr><td></td></tr> #end
在这个例子中定义的宏的名字为d,并且可以使用类似于其他的VTL指示符的使用格式来调用:#d()
当这个模版被调用的时候,Velocity会使用一个空白的表格单元格来代替。
一个Velocity的宏能够包含零个(在上面这个例子中已经演示了)到任何个数的参数。但当Velocity宏在被调用的时候,调用的参数必须和这个宏在定义的时候定义的参数个数相同。当然,许多Velocity宏都比上面这个例子要复杂。下面是一个带有两个参数的Velocity宏的例子,一个颜色值,一个数组。
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
<tr><td bgcolor=$color>$something</td></tr>
#end
#end
这个叫做tablerows的Velocity宏带有两个参数。第一个参数代替了$color的位置,第二个参数代替了$somelist的位置。
任何的能放入模版中的VTL,都能放在Velocity宏中。tablerows包含了一个foreach语句,并且有两个#end语句。第一个数据#foreach,第二个结束了该Velocity宏的定义。
#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
#set( $color = "blue" )
<table>
#tablerows( $color $greatlakes )
</table>
注意$greatlakes取代了$somelist。当这个#tablerows象上面的例子那样调用,输出为:
<table>
<tr>
<td bgcolor="blue">Superior</td>
</tr>
<tr>
<td bgcolor="blue">Michigan</td>
</tr>
<tr>
<td bgcolor="blue">Huron</td>
</tr>
<tr>
<td bgcolor="blue">Erie</td>
</tr>
<tr>
<td bgcolor="blue">Ontario</td>
</tr>
</table>
Velocity宏可以定义在一个Velocity模版之内,但这是意味在同一应用的其他的模版中该宏是不可见的。定义一个能让所有的模版都能使用的宏又很多的好处:能够减少定义同一个Velocity宏的数量,减少了出错的几率,并且保证了在一处的改变能应用到所有的模版中。
如果#tablerows($color $list)定义在模版库中,那么这个宏就能在相似的所有的模版中使用了。它能被多次使用于不同的目标。在模版mushroom.vm中,调用#tablerows宏来列出一个典型的蘑菇房。
#set( $parts = ["volva","stipe","annulus","gills","pileus"] )
#set( $cellbgcol = "#CC00FF" )
<table> #tablerows( $cellbgcol $parts )
</table>
当完成了对mushroom.vm的请求,Velocity能在模版库中找到#tablerows宏------需要把这个宏定义在velocity.properties文件中。该例子输出为:
<table>
<tr>
<td bgcolor="#CC00FF">volva</td>
</tr>
<tr>
<td bgcolor="#CC00FF">stipe</td>
</tr>
<tr>
<td bgcolor="#CC00FF">annulus</td>
</tr>
<tr>
<td bgcolor="#CC00FF">gills</td>
</tr>
<tr>
<td bgcolor="#CC00FF">pileus</td>
</tr>
</table>
Velocity宏中的参数Velocimacro Arguments
Velocity宏能有下列一些类型的VTL元素:
• 引用:Reference : anything that starts with '$'
• 字符串:String literal : something like "$foo" or 'hello'
• 数值:Number literal : 1, 2 etc
• 数值范围:IntegerRange : [ 1..2] or [$foo .. $bar]
• 对象数组:ObjectArray : [ "a", "b", "c"]
• boolean value true
• boolean value false
当使用引用作为参数传递给Velocity宏,请注意引用是按名字使用。意味着他们的值是在Velocity宏中每一次的引用都是重新生成的。这个特点允许你传入一个对方法的引用,并且在宏中的每一次引用都调用该方法一次。作为一个例子,下面的代码展示了这一点:
#macro( callme $a )
$a
$a
$a
#end
#callme( $foo.bar() )
在callme宏中,方法引用$foo.bar()实际上被调用了三次。results in the method bar() of the reference $foo being called 3 times.
初次接触该特性,会感到一些惊讶,但当你比较深入的思考Velocity宏的最初的动机的时候------减少在VTL中对于重复代码的剪切/复制操作。
如果你不需要这种特性,那么你可以总是把方法的值传递给一个变量引用,再把该引用作为参数传递给方法,如下面的例子所示:
#set( $myval = $foo.bar() )
#callme( $myval )
Velocity宏的属性Velocimacro Properties
在velocity.properties文件中有几行是用来控制Velocity的宏的。注意这部分在Developer Guide 中也有介绍。
velocimacro.library------以逗号分隔开的Velocity宏模版库的列表。默认情况下,Velocity只寻找VM_global_library.vm.这一个模版库。配制的模版路径用来寻找模版库。
velocimacro.permissions.allow.inline------取值为false或者true。该属性用来规定宏是否能定义在模版中。默认值为true,即允许模版设计者把宏直接定义在模版中。
velocimacro.permissions.allow.inline.to.replace.global------取值为true或者false。该属性规定在模版中定义的宏是否能覆盖在全局宏库(velocimacro.library)中定义的宏。该属性的默认值为false,即阻止定义在模版中的宏覆盖在引擎启动时候加载的全局宏。
velocimacro.permissions.allow.inline.local.scope - 取值为true或者false。该属性控制了在模版中定义的宏是否只对定义该宏的模版可见。
分享到:
评论
1 楼 zxjlwt 2016-02-18  
学习了
素人派
http://surenpi.com

相关推荐

    Java web velocity分页宏示例

    主要介绍了Java web velocity分页宏示例,需要的朋友可以参考下

    velocity新手入门

    文档是velocity基本知识,语法运用,宏定义等,适合新手入门

    《Velocity 模板使用指南》中文版

    2.什么是Velocity. 3 3.Velocity能为你做什么. 3 1.一个Mud Store Example. 3 4.Velocity Template Language (VTL) 介绍... 4 5.输出第一个VTL页面!. 4 6.Comments(注释). 5 7.References(引用)5 1.Variables(变量)....

    Velocity模板技术语法详细介绍

    Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...

    《Velocity1.4 java开发指南》中文版

    6.Velocimacro(宏配置) 22 7.语义更改 23 8.运行时配置 23 11.Configuring the Log System(日志记录配置) 23 1.一般的可选日志功能: 23 2.Simple Example of a Custom Logger 25 12.Configuring Resource Loaders...

    velocity学习笔记

    velocity 1.本文目地和使用对象 2.什么是Velocity? 3.Velocity能为你做什么? 1.一个Mud Store Example 4.Velocity Template Language (VTL): 介绍 5.输出第一个VTL页面! 6.Comments(注释) 7.References(引用) 1....

    Velocity 语法

    7.宏…………………………………………………………………………………3 8. #stop……………………………………………………………………………4 9. #include与#parse…………………………………………………………...

    宏经考题A1

    (2) Suppose that velocity is constant and the economy’s total output of goods an

    nano_ecs:基于宏的准实体组件系统

    基于宏的准实体组件系统 每个实体最多64个组件 将组件顺序存储在同一阵列中 启用/禁用组件的遮罩 use nano_ecs :: * ; #[derive(Clone)] pub struct Position ( pub f32 ); #[derive(Clone)] pub struct Velocity ...

    UDF 动网格,DEFINE-CG-MOTION,DEFINE-GRID-MOTION

    动网格,DEFINE_CG_MOTION,DEFINE_GRID_MOTION,很好的模板(dynamic mesh good template)

    宏「Hiro」-crx插件

    它有点像Notational Velocity,只是具有上面提到的其他好处。 我已经在使用Whatsapp或任何其他群组Messenger,Hiro有用吗? 是的。 请参阅屏幕截图中的示例。 Hiro提供更多永久性信息。 如果您曾经以为“它一定在...

    FreeMarker技术指南

    二、FreeMarker与JSP、Velocity的对比 三、一个简单的FreeMarker Demo 四、FreeMarker的数据模型 五、模板的常用指令 六.常用的FTL标记 七、内建函数: 八、FreeMarker macro(宏)的使用 九、通过Struts2设置type来...

    ecso:Haxe的实验实体组件系统

    Haxe-Powered :与内置的语义和功能(甚至宏)集成。 高级代码分析:用于面向ECS的高级编译器优化的结构。 超级简单的API :轻巧,具有简洁性,可读性和简洁性策略的可发现性。 跨平台:启用特定于目标的优化。 ...

    Veracity-开源

    Veracity是Jakarta的Velocity Template Engine的增强重新实现。 它基于Java 1.4,并包括对局部变量赋值,用户可选的空格处理,宏引用等的支持。

    国企Java笔试题目-xwiki-docker:用于在docker上构建和运行XWiki的Dockerfile

    Velocity、Groovy、Python、Ruby 和 PHP 在内的脚本语言可以使用 wiki 宏直接写入 wiki 页面。 用户创建的数据结构可以在 wiki 文档中定义,这些结构的实例可以附加到 wiki 文档,存储在数据库中,并使用 Hibernate ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven权威指南 Authors Tim O'Brien (Sonatype, Inc.) , John Casey (Sonatype, Inc.) , Brian Fox (Sonatype, Inc.) , Bruce Snyder () , Jason Van Zyl (Sonatype, Inc.) , Juven Xu () Abstract ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.4.1. velocity.properties 14.4.4.2. FreeMarker 14.4.5. 绑定支持和表单处理 14.4.5.1. 用于绑定的...

    spring chm文档

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    超完整FreeMarker中文教程,代码

    前言................................................................................................................................. 7 什么是FreeMarker? ................................................

    Spring中文帮助文档

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

Global site tag (gtag.js) - Google Analytics