『Ben狐狸』

自信、奉献、快乐

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 4 文章 :: 0 评论 :: 0 Trackbacks
 

1关于本指南

本指南是VTL(Velocity Template Language)的参考文档。至于更多信息,请查阅Velocity用户手册(Velocity User Guide)

2语法参考

2.1变量

符号:

$[!][{][a..z,A..Z][a..z,A..Z,0-9,-,_][]]

大家对上面的表示不知道清楚不清楚,我这儿给大家描述一边,以后类似的表述都是这样。“[]”表示可选项,意为可有可无。通过上面的表述可以看出变量一个必写项和若干个可选项组成。其中$是必写项,其余的都是可选项。

例如:

•一般符号:$mud-slinger_9

•静态符号:$!mud_slinger_9

•正式符号:${mud_slinger_9}

2.2属性

符号:

$[{][a..z,A..Z][a..z,A..z,0..9,-,_]*.[a..z,A..Z][a..z,A..Z,0..9,-,_]*[}]

例如:

•一般符号:$customer.Address

•正式符号:${purchase.Total}

2.3方法

符号:

$[{][a..z,A..Z][a..z,A..Z,0..9,-,_]*.[a..z,a..Z][a..z,A..Z,0..9,-,_]*([可选参数列表…])[}]

例如:

•一般符号:$customer.getAddress()

•正式符号:${puchase.getTotal()}

•带有参数列表的一般符号:$page.setTile(“My Home Paget”)

VTL属性值表示的简短使用代替了VTL方法表示中的get和set方法。例如,$object.getMethod()或者$object.setMethod()使用VTL属性值表示可将其简化为$object.Method。在使用时这样表示方法通常更加便捷的。属性值表示和方法表示最主要的区别在于是否有传递的参数,如果有参数则需要是用方法表示,如果没有参数就可以直接使用属性值表示。

3指令

3.1#set-确立变量、属性、方法的值

格式:

#[{] set[}]($ref=[“,’]arg[”,’])

用法:

•$ref-等号左边必须是一个变量或者属性值

•$arg-等号右边的arg可以用双引号或者单引号组成的字符串或者字符。如果等号右边是NULL,那等号左边将无法被赋值。

例如:

•变量:#set($monkey=$bill)

•字符串:#set($monkey.Friend=’monica’)

•属性值:#set($monkey.Blame=$whitehouse.Leak)

•方法:#set($monkey.Plan=$spindoctor.weave($web))

•一般:#set($monkey.Number=123)

•列表:#set($monkey.Numbers=[1..3])

•数组:#set($monkey.Say=[“Not”,$my,”fault”])

等式右边也可以是一个简单的算术表达式,例如:

•加法:#set($value=$foo+1)

•减法:#set($value=$bar-1)

•乘法:#set($value=$foo*$bar)

•除法:#set($value=$foo/$bar)

•求余:#set($value=$foo%$bar)

3.2#if/#elseif/#else-条件判断

格式:

#[{]if[}]([判断条件])[输出内容][#[{ ]elseif[ }]([判断条件])[输出内容]]*[# [{ ]else[ }]([判断条件])[输出内容]]# [{ ]end[ }]

例如:

Operator Name

Symbol

Alternative Symbol

Example

Equals Number

==

eq

#if( $foo == 42 )

Equals String

==

eq

#if( $foo == "bar" )

Object Equivalence

==

eq

#if( $foo == $bar )

Not Equals

!=

ne

#if( $foo != $bar )

Greater Than

gt

#if( $foo > 42 )

Less Than

lt

#if( $foo < 42 )

Greater Than or Equal To

>=

ge

#if( $foo >= 42 )

Less Than or Equal To

<=

le

#if( $foo <= 42 )

Boolean NOT

!

not

#if( !$foo )

注意:

1“== “操作可以用来比较数字,字符串,或同一个类的不同对象或不同类型的对象. 当是不同类的对象时,会调用它们的toString()命令结果来做比较看是否相等.

2.你也可以用括弧来限定指令。当书写时紧跟一个#else,这是就需要将该else指令限定。

         #if( $foo == $bar)it's true!#{else}it's not!#end</li>

3.3#foreach-对象循环

格式:

#[{] foreach[}]($ref in arg)statement#[{] end[}]

用法:

•$ref-用于循环的变量

•arg-可能是一个列表引用(i.e.object.array,collection,or map),或者一个array list,或者其他列表。

•statement-当velocity发现下一个有效对像在列表中,输出可以是一个合法的VTL.

例如下面省略statement的#foreach():

•引用:#foreach($item in $items)

•数组:#foreach($item in [“Not”,$my,”fault”])

•列表:#foreach($item in[1...3])

Velocity提供一个简单的方式实现循环计数器,这样你可以根据一下来做:

<table>

#foreach( $customer in $customerList )

    <tr><td>$velocityCount</td><td>$customer.Name</td></tr>

#end

</table>

循环计数器引用中有一个默认的名字-$velocityCount,它是在velocity.properties中定义。计数器默认设置从1开始计数,同样你也可以在velocity.properties中进行设定成0或者1。计数器的部分属性参数可以在velocity.properties文件里找到:

# Default name of the loop counter

# variable reference.

directive.foreach.counter.name = velocityCount

# Default starting value of the loop

# counter variable reference.

directive.foreach.counter.initial.value = 1

在Velocity1.5中加入了对计数器最大值的限制,默认值是-1,表示没有限制。

# The maximum allowed number of loops.

directive.foreach.maxloops = -1

3.4#include-加载不用被Velocity解析的本地文件

格式:

#[{]include[}](arg[arg2…argn])

        •arg-在TEMPLATE_ROOT下引用一个有效的文件

    例如:

        •字符串:#include( "disclaimer.txt" "opinion.txt" )

        •变量:#include( $foo $bar )

    3.5#parse-加载一个需要被Velocity解析的本地模板

    格式:

        #[{]parse[}](arg)

        •arg-在TEMPLATE_ROOT下引用一个模板

    例如:

        •字符串:#parse( "lecorbusier.vm" )

        •变量:#parse( $foo )

    通过设置配置中的解析层次深度的最大值velocity.properties中项 parse_directive.maxdepth in可以防止死循环. (The default parse depth is 10.)

    3.6#stop-停止模板引擎

    格式:

        #[{]stop[}]

    用法:

        它将停止执行流动中的模板。这对调试模板来说很不错。

    3.7#evaluate-动态的估计一个字符串或者引用

    格式:

        #[{] evaluate[}](arg)

        •arg-被动态估计的字符串或者

    例如:

        c字符串:#evaluate( 'string with VTL #if(true)will be displayed#end' )

        •变量:#include( $foo )

    3.8#macro-让用户可以定义宏操作(Velocimacro (VM):一组实现特定功能的VTL

    格式:

        #[{]macro[}](vmname $arg1[$arg2 $arg3 … $argn])[VM VTL code…]# [{]end[}]

vmname – 宏名字 VM (#vmname)

        $arg1 $arg2 [ ... ] – 要传给宏的参数VM

        [ VM VTL code... ] –宏代码,有效的VTL

    一旦定义,VM就像是模板中任何别的VTL指令。

         #vmname( $arg1 $arg2 )

    VMs可以被定义在两个地方:

1.Template library:可以配置用户定义的库,以便全站使用。

2.Inline:放入到一般的模板文件中,仅当配置参数velocimacro.permissions.allowInline=true时生效。

4注解

4.1单行注解

例如:

        ##This is a comment.

4.2多行注解

例如:

#*

This is a multiline comment.

*#

posted on 2008-08-08 19:12 Ben狐狸 阅读(237) 评论(0)  编辑  收藏 所属分类: Velocity

只有注册用户登录后才能发表评论。


网站导航: