做java開(kāi)發(fā)的朋友一般對(duì)JSP是比較熟悉的,大部分人第一次學(xué)習(xí)開(kāi)發(fā)View層都是使用JSP來(lái)進(jìn)行頁(yè)面渲染的,我們都知道JSP是可以嵌入java代碼的,在遠(yuǎn)古時(shí)代,java程序員甚至在一個(gè)jsp頁(yè)面上就完成了所有的業(yè)務(wù)邏輯代碼,能夠?qū)嵱闷脚_(tái)的API,這是jsp的一個(gè)優(yōu)點(diǎn),所謂物極必反,這一點(diǎn)在某些方面也成了它的一個(gè)缺點(diǎn),內(nèi)容和表示的界限變得很模糊,使得mvc分層不夠徹底.

Velocity的寫(xiě)法比較接近java的語(yǔ)法,語(yǔ)法非常簡(jiǎn)單,對(duì)于java開(kāi)發(fā)人員來(lái)說(shuō),從一竅不通到上手使用velocity幾乎不需要花很多時(shí)間,還有很重要的一點(diǎn),我覺(jué)得是velocity沒(méi)有很多的標(biāo)簽,自由度比較高.

Velocity渲染模板時(shí),先把模板解析成一顆語(yǔ)法樹(shù),然后去遍歷這棵樹(shù),分別渲染每一個(gè)節(jié)點(diǎn).

我對(duì)velocity也屬于剛剛?cè)腴T(mén)的階段,所以只是簡(jiǎn)單的總結(jié)一下一些常用的語(yǔ)法和基礎(chǔ)知識(shí).

#set 語(yǔ)法

#set可以創(chuàng)建一個(gè)Velocity的變量,一般用于向一個(gè)變量或?qū)傩再x值,下面的第一個(gè)例子,大概和java中的String name=user.getName();是一個(gè)意思.

在Velocity語(yǔ)法樹(shù)中,#set表達(dá)式對(duì)應(yīng)的是一個(gè)ASTSetDirective類(lèi),"="兩邊的表達(dá)式值,分別對(duì)應(yīng)該類(lèi)的兩個(gè)子節(jié)點(diǎn),LHS和RHS.

  • #set($user.name="zhangsan")   可以理解為     user.setName("zhangsan")
  • #set(name=name=user.name)         可以理解為     user.getName();

像上述例子中的第一個(gè):不僅可以表示 user.setName("zhangsan"),還可以表示user.setname("zhangsan"),或者user.put("name","zhangsan"),這是動(dòng)態(tài)語(yǔ)言的特點(diǎn),不想java語(yǔ)法那樣嚴(yán)格的定義.

注意:#set表達(dá)式,結(jié)尾不需要#end跟隨,其他表達(dá)式基本都需要加#end.

#foreach語(yǔ)法

這是Velocity中唯一一種循環(huán)的語(yǔ)法,類(lèi)似于java的增強(qiáng)for循環(huán)