background image

 

在 Velocity 

 

模板语言的语法中,以美元符 $ 

 

开头的为变量的声明或者引用,而以井号 # 

 

开头的语句则为 Velocity 的指令(Directive

 

)。其中 Velocity 的指令又分为内置指令、自定

 

义宏和自定义指令。 Velocity 

  

包含下列这些内置指令:

 另外也可以通过宏来扩展指令,例如,请看下面这个宏的定义:

#macro(invoke $__p_page) 
    #if($__p_page.startsWith("/")) 
        #parse($__p_page) 
    #else 
        #set($__uri = $resource.this_vm()) 
        #set($__path = $__uri.substring(0, $__uri.lastIndexOf("/"))) 
        #parse("$__path/$__p_page") 
    #end 
 #end

 

 

 

上 面这个名为 invoke 的宏的作用是以相对路径的方式嵌入某个动态的页面。使用的

 

方法是 #invoke( “ hello.vm ” )

 

。尽管 Velocity 的自定义宏可以用来扩展指令,但是宏有一

个不足的地方,它更适合用来执行一些比较通用的代码嵌入和简单的功能处理。

 

 

由此引出来的问题是,我如何来编写一个类似于 #foreach 的指令呢,并具有逻辑判

 

断的功能?

Velocity 的指令类型简介

 

 

在 Velocity 的指令定义上,有两种指令类型分别是行指令和块指令。行指令例如 

#set($name= ” Winter Lau ” ) 赋值指令,只有一行,中间没有任何的代码;而块指令例如

 

循环指令 #foreach($idx in [1..20]) $idx #end

 

,块指令需要用 #end 

 

来结束。在 Velocity 自带

的指令中块指令包括有:#if #elseif #foreach #define   

和 #macro 这几个指令,除此之外都是

 

行指令。

 

编写自定义的 Velocity 指令 
Velocity 

 

允许您对指令系统进行扩展,在 Velocity 引擎初始化的时候会加载系统内置

 

指 令 和 用 户 的 自 定 义 指 令 。 系 统 的 内 置 指 令 已 经 在 Velocity  

 

的 Jar   包 中 的 

directive.properties 文件中定义,不建议直接修改该文件。而自定义的指令要求用户在