在程序诞生之初有一句话也随之诞生“三种基本逻辑结构可以组成任何程序”。这里的三种基本逻辑结构就是:顺序结构、条件结构、循环结构。
确实至今任何复杂程序也没能跳出这三种基本逻辑结构。由于工作原因需要接触Velocity模板引擎。这篇文章讲的就是如何运用Velocity中的三种基本逻辑结构。
首先介绍一下Velocity,我就到网上复制粘贴一下了,毕竟网上介绍的已经很好了,省的我自己来又使你感到迷茫。
“Velocity是一个基于java的模板引擎。它允许任何人仅仅简单的使用模板语言来引用由java代码定义的对象。
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提 供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 ”
以上是来自Velocity官网(http://velocity.apache.org/)的介绍。
·顺序结构
顺序结构是最简单易懂,也是任何语言中用的最多的结构。也就是自上而下一行一行的运行,Velocity也不例外。不过Velocity有一个特别的概念(宏)。说到宏我首先联想到的是office中的宏,在Velocity中宏和office中的很类似。
#macro指令用于定义Velocity的宏,举个简单的例子:
#macro ( a )
<h1>定义一个宏</h1>
#end
在Velocity中使用包含代码块的指令都需要在结尾加上#end指令,以便让Velocity知道代码从何开始从何结束。上面就定义好了一个宏,调用也非常简单:
#a()
这段代码就调用了宏,在括号里的第一个值表示该宏的名字。同样的我们也可以传入参数如下:
#set ( $color = “blue” )
#macro ( a $color)
<h1>颜色是${color}</h1>
#end
调用该宏得到的结果是:“颜色是blue”。
·条件结构
Velocity的条件结构也很容易理解,因为它和其它语言没什么特别区别。请看下面例子:
#if( $foo < 10 )
<strong>该数字小于10</strong>
#elseif( $foo == 10 )
<strong>该数字等于10</strong>
#else
<strong>该数字大于10</strong>
#end
上面这段程序很容易理解,值得注意的是:“Velocity使用‘==’来比较两个值,而且velocity要求等号两边的值类型相同。而且Velocity的数字是作为Integer来比较的。”就拿上述代码为例,如果${foo}定义的不是一个Integer值,那么它会直接返回false。
Velocity也同样的拥有与(&&)、或(||)、非(!)逻辑运算符。注意:“&&、||是有短路效应的,一旦前一个就可以判断真假,后面的条件不再进行判断。”
$!foo和!$foo的区别也要格外注意:“假如页面上有$foo, 如果对象foo存在,那么显示foo的值,如果对象foo不存在,那么页面将会显示$foo这四个字符。$!foo就是在foo不存在的情况下,强制把$foo显示为空字符串。!$foo是对$foo取反。”
·循环结构
与别的语言不同,Velocity中只有#foreach这一种循环指令。
#foreach( $elem in $allElems)
$elem</br>
#end
每次循环都从$allElems中取出一个值赋给$elem变量。 $allElems可以是一个Vector、Set或者Array。分配给$elem的值是一个java对象,并且可以通过变量被引用。
在Velocity中,有一个变量$velocityCount用作循环计数,初始值是1。这个变量的名字和初始值是在velocity.properties文件里配置的。下面是结合$velocityCount变量的一个循环例子:
#foreach ( $customer in $customerList )
<h1>当前是第$velocityCount次循环</h1>
<br/>
<h1>当前循环的值是:$customer</h1>
#end