velocity調(diào)用java方法
velocity調(diào)用java方法
Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅使用簡單的模板語言(template language)來引用由java代碼定義的對象。下面由學習啦小編整理了幾種vlookup函數(shù)的使用方法,希望對大家有所幫助。
velocity調(diào)用java方法一
項目結(jié)構(gòu) velocity tool java類
public class T {
public String msg() {
return "難道必須沒有報名嘛 會瘋掉的!";
}
public String getMessage() {
return "message";
}
public String sayHello(String s) {
return "say hello by macro " + s;
}
}
以上是類 無包名
以上是tools.xml文件內(nèi)容存放在web-inf下
input.encoding=utf-8
output.encoding=utf-8
# Filepath for error template, relative to web application root directory
tools.view.servlet.error.template = error.vm
# Directory for layout templates, relative to web application root directory
tools.view.servlet.layout.directory = /
# Filepath of the default layout template
# relative to the layout directory
# NOT relative to the root directory of the webapp!
tools.view.servlet.layout.default.template = default.vm
以上是velocity.properties 存放與web-inf下
velocity
org.apache.velocity.tools.view.VelocityViewServlet
org.apache.velocity.toolbox
/WEB-INF/tools.xml
org.apache.velocity.properties
/WEB-INF/velocity.properties
velocity
*.vm
index.vm
以上是web.xml
$screen_content
呵呵的部分
以上是default.vm
#set($page_title="Layout Test")
#set($layout="default.vm" )
$t.getMessage()
velocity調(diào)用java方法二
1, 注釋,任何一種語言中,注釋總是必不可少的。
(1) 單行注釋:
## 這是單行注釋
(2) 多行注釋:
#*
這是多行注釋
*#
2, 輸出,也就是數(shù)據(jù)展現(xiàn)。
$userName
這樣便可以輸出用戶名了。但是,并不是絕對的能夠輸出用戶名,因為可能這里輸出的變量并不存在。如果userName這個變量不存在,或者為空,$userName將會被當 作字符串直接輸出,也就是當我們期望在userName為空的時候輸出空,但是卻輸出了’$userName’。為了避免這種情況,推薦這樣的變量輸出寫法:
$!{userName}
3, 變量聲明與賦值
一般情況下,我們不推薦在html頁面中直接聲明Velocity變量,因為這會增加html界面的復雜度。如果確實有必要,可以使用下面的語句聲明變量并賦值:
#set($userName=’hanmeimei’)
請注意:Velocity的變量聲明都要帶著$符號。
在LML中,我們經(jīng)常在所謂的后臺,也就是Action中給變量賦值,這樣在Action對應的html模板中也可以直接使用該變量??墒褂靡幌聝煞N方法:
(1) 傳統(tǒng)的getter/setter
(2) ViewBag.Add(key,value)
相比之下,第二種非傳統(tǒng)的方式更快速。
4, 算術(shù)運算
Velocity支持在模板中使用(+,—,*,/),例如:
#set($a=1)
#set($b=1)
#set($c=$a + $b)
C在算對的情況下等于2,算錯的情況下等于3.。有一個問題大家需要注意,我在使用四則運算的時候,發(fā)現(xiàn)’—‘不起作用,最后經(jīng)過嘗試,發(fā)現(xiàn)需要在變量和運算符之 間留一個空格,這樣就沒問題了。如果,你也遇到這樣的問題,也可以這么嘗試一下。
5, 邏輯運算
支持一下幾個運算符,就如同java一樣:
&&:與。
||:或。
!:非。
6, 迭代
#foreach ($item in $list)
這是第 $velocityCount 個元素: $item
#end
$velocityCount,表示當前序號。
還要說一下我們在LML中分頁顯示數(shù)據(jù)用到的迭代,如下:
#foreach($item in $pager.result.rows)
$item.userName
##以下兩種方式可迭代列
#set($row=$item.values().toArray())
##方式1
#foreach($a in $row) $!a #end
##方式2
#foreach($i in [0..2]) $row.item($i) #end
#end
$pager.result是在分頁Action中查詢到的一個數(shù)據(jù)集Result。
我們也可以在模板中直接聲明并賦值一個list,而后進行迭代:
#set( $list = ["a", "b", "c"])
#foreach ($item in $list)
$velocityCount
#end
還有一種情況,我們需要迭代從1到10,所有的整數(shù):
#foreach ($item in [1..10])
$velocityCount
#end
注意中間就是兩個點。
查閱很多資料,都直接說明Velocity不能迭代數(shù)組,下面說明原因:
對數(shù)組的訪問在Velocity中存在問題,因為Velocity只能訪問對象的方法,而數(shù)組又是一個特殊的Array,所以雖然數(shù)組可以進行循環(huán)列舉,但卻不能定位訪問特定位置 的 元素,如 strs[2],數(shù)組對固定位置元素的訪問調(diào)用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數(shù)組要么改成List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數(shù)組對象和要訪問的位置參數(shù),從而達到返回所需值的目的。
Velocity支持迭代的數(shù)據(jù)類型有:Vector、Hashtable或者Array
7, 條件判斷
#if (條件1)
#elseif (條件2)
#else
#end
一直不是很理解Velocity的數(shù)據(jù)類型,所以在項目中最多使用的是String,就像這里的條件表達式,我們經(jīng)常這樣寫: if(“$!{userSex}”==”0”),雖然性別使用int表示。
8, 文件引入,#include與#parse
兩者作用類似,但是有以下不同:
(1) 與#include不同的是,#parse只能指定單個對象。而#include可以有多個
如果您需要引入多個文件,可以用逗號分隔就行:
#include ("a.gif", "b.txt", "c.htm" )
在括號內(nèi)可以是文件名,但是更多的時候是使用變量的:
#include ( “a.txt”, $photo )
(2) #include被引入文件的內(nèi)容將不會通過模板引擎解析;
而#parse引入的文件內(nèi)容Velocity將解析其中的velocity語法并移交給模板,意思就是說相當與把引入的文件copy到文件中。
以上兩點摘自互聯(lián)網(wǎng),到目前我基本沒有使用過#include。#parse最大的用處或許是這樣用:
#parse(“title.html”)
類似layout。
9, 內(nèi)置對象
Velocity內(nèi)置了一些對象,在模版里可以直接調(diào)用,列舉如下:
$request、$response、$session
這些一直也沒使用過,完全可以在Action頁面把各種對象處理好了。
基本上,在我們的一般開發(fā)中,掌握以上語法已經(jīng)可以應付自如了。是不是很簡單呢,我們希望的不就是簡單嗎,簡單所以快。寫的不好,敬請見諒。
補充:
LML支持在html模板中直接調(diào)用java方法,并可以向方法傳遞參數(shù)(字面值,或者Velocity變量),還可以輸出方法的返回值。當然,為了避免模板頁面過于復雜,我們還是應該盡量減少在模板中調(diào)用java方法。如果確實有必要調(diào)用,則需要現(xiàn)在模板頁面對應的Action類上先行聲明:
@Helper( { TestHelper.class })
這樣就可以在html模板中調(diào)用:
$!TestHelper.Test("$!{userName}")
JAVA語言特點
1.簡單性
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特征去掉了,這些特征是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特征,并且不使用主文件,免去了預處理程序。因為Java沒有結(jié)構(gòu),數(shù)組和串都是對象,所以不需要指針。Java能夠自動處理對象的引用和間接引用,實現(xiàn)自動的無用單元收集,使用戶不必為存儲管理問題煩惱,能更多的時間和精力花在研發(fā)上。
2.面向?qū)ο?/p>
Java是一個面向?qū)ο蟮恼Z言。對程序員來說,這意味著要注意應中的數(shù)據(jù)和操縱數(shù)據(jù)的方法(method),而不是嚴格地用過程來思考。在一個面向?qū)ο蟮南到y(tǒng)中,類(class)是數(shù)據(jù)和操作數(shù)據(jù)的方法的集合。數(shù)據(jù)和方法一起描述對象(object)的狀態(tài)和行為。每一對象是其狀態(tài)和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。Java程序是用類來組織的。
Java還包括一個類的擴展集合,分別組成各種程序包(Package),用戶可以在自己的程序中使用。例如,Java提供產(chǎn)生圖形用戶接口部件的類(java.awt包),這里awt是抽象窗口工具集(abstract windowing toolkit)的縮寫,處理輸入輸出的類(java.io包)和支持網(wǎng)絡功能的類(java.net包)。
3.分布性
Java設計成支持在網(wǎng)絡上應用,它是分布式語言。Java既支持各種層次的網(wǎng)絡連接,又以Socket類支持可靠的流(stream)網(wǎng)絡連接,所以用戶可以產(chǎn)生分布式的客戶機和服務器。
網(wǎng)絡變成軟件應用的分布運載工具。Java程序只要編寫一次,就可到處運行。
4.編譯和解釋性
Java編譯程序生成字節(jié)碼(byte-code),而不是通常的機器碼。Java字節(jié)碼提供對體系結(jié)構(gòu)中性的目標文件格式,代碼設計成可有效地傳送程序到多個平臺。Java程序可以在任何實現(xiàn)了Java解釋程序和運行系統(tǒng)(run-time system)的系統(tǒng)上運行。
在一個解釋性的環(huán)境中,程序開發(fā)的標準“鏈接”階段大大消失了。如果說Java還有一個鏈接階段,它只是把新類裝進環(huán)境的過程,它是增量式的、輕量級的過程。因此,Java支持快速原型和容易試驗,它將導致快速程序開發(fā)。這是一個與傳統(tǒng)的、耗時的“編譯、鏈接和測試”形成鮮明對比的精巧的開發(fā)過程。
猜你感興趣: