常用指令:
"#"用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等;
如:
#if($info.imgs)
#else
#end
#if($foo<10)
Go North
#elseif($foo==10)
Go East
#elseif($bar==6)
Go South
#else
Go West
#end
$"用来标识一个对象(或理解为变量);
如:$i、$msg、$TagUtil.options(...)等
"!"用来强制把不存在的变量显示为空白。
如当页面中包含$msg,如果msg对象有值,将显示msg的值,如果不存在msg对象同,则在页面中将显示$msg字符。这是我们不希望的,为了把不存在的变量或变量值为null的对象显示为空白,则只需要在变量名前加一个“!”号即可。
当使用!时表示当此变量值为空时,显示空字符串。比如当$article为空,那会显示“$article“,而$!article会显示为“”
如:$!Msg
在模板中设置变量:#set( $a = "Velocity" )
变量和字符串如何拼接: 例: ${obj.name}我是大晴
对象调用方法: 例如:$article.GetListByTitle('nvelocity')或${article.GetListByTitle('nvelocity')}。其实对对象的属性值也可以用$article.get_Title()获得。
循环语法:
#foreach( $info in $list) $info.someList #end 循环读取集合list中的对象,并作相应的处理。
如:EasyJF开源论坛系统中论(0.3)坛首页显示热门主题的html界面模板脚本:
#foreach( $info in $hotList1)
#end
上面的脚本表示循环遍历hotList1集合中的对象,并输出对象的相关内容。
Velocity(7)——#foreach指令
首先是#foreach的简单示例:
#foreach( $elem in $allElems)
$elem
#end
上面这个例子中,$allElems可以是一个Vector,一个HashTable,一个数组。
在Velocity中,有一个变量$velocityCount用作循环计数,初始值是1。这个变量的名字和初始值是在velocity.properties文件里配置的。
$velocityCount
这个变量在velocity属性文件中定义,在#foreach的时候可以用得上,比如我foreach一个List
Java代码
1. #foreach($user in $users)
2. #userNode($user)#if($velocityCount != $user.size()),#end
3. #end
或
Java代码
1. #foreach($user in $users)
2. #if($velocityCount != 1),#end #userNode($user)
3. #end
默认$velocityCount 从1开始。
#Parse
#Parse用来在当前模板中引入并执行另一个(本地的)模板——可以是静态的,也可以是动态的——并把结果嵌入到当前位置。#Parse()指令的参数,可以是一个双引号括起来的文件名,也可以是一个变量,但是它不能接受多个参数。
被#Parse引入的文件仍然可以使用#Parse指令。在velocity.properties文件中有一个属性directive.parse.max.depth,默认值是10,它指定了#Parse嵌套的最大层次。既然#Parse嵌套是允许的,#Parse递归也是允许的。
假如a.vm #Parse b.vm,那么a.vm中定义的变量v,在b.vm中可以随便使用。如果b.vm也定义了v,在b.vm中可以随便使用。如果b.vm也定义了v,那么b.vm中用到的将会是自己的v,而不是a.vm中的v,而不是a.vm中的v。
包含文件#inclue("模板文件名")或#parse("模板文件名")
主要用于处理具有相同内容的页面,比如每个网站的顶部或尾部内容。
使用方法,可以参考EasyJF开源Blog及EasyJF开源论坛中的应用!
如:#parse("/blog/top.html")或#include("/blog/top.html")
parse与include的区别在于,若包含的文件中有Velocity脚本标签,将会进一步解析,而include将原样显示。
注释:
velocity的注释是用多个#号来标识的,大段注释用 #* 和 *#包起来
单行注释:##注释内容
多行注释:
#*
注释内容
*#
宏调用
macro指令让模板设计者可以将些重复、相关的的脚本版断定义为一个功能块.
这是一个独立的vm模板
a.vm内容片段
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
$something
#end
在b.vm中调用
b.vm中的内容片段
1.引入a.vm
2.
#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
#set( $color = "blue" )
#tablerows( $color $greatlakes )
输出结果:
Superior Michigan Huron Erie Ontario
如果将宏#tablerows($color $list) 定义到一个模板库中(Velocimacros template library), 其它模板就都可以访问它了.
尽量不要直接在模板中使用#parse() 包含#macro() 指令.因为#parse() 动作在运行时执行,时会有一个在VM 中查找元素的过程.
在js中调用的例子:
参考学习地址:
https://www.cnblogs.com/yuepeng/archive/2010/11/23/1885524.html
物业交割
水电表初始读数还未录入系统,请设置物业交割时各表起始读数
电表初始读数
水表初始读数
热水表初始读数
交割日期
操作人
电表读数
水表读数
热水表读数