學(xué)習(xí)啦 > 知識大全 > 方法百科 > 產(chǎn)品使用方法 > velocity調(diào)用java方法

velocity調(diào)用java方法

時間: 陳哲凡673 分享

velocity調(diào)用java方法

  Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅使用簡單的模板語言(template language)來引用由java代碼定義的對象。下面由學(xué)習(xí)啦小編整理了幾種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

  這樣便可以輸出用戶名了。但是,并不是絕對的能夠輸出用戶名,因?yàn)榭赡苓@里輸出的變量并不存在。如果userName這個變量不存在,或者為空,$userName將會被當(dāng)             作字符串直接輸出,也就是當(dāng)我們期望在userName為空的時候輸出空,但是卻輸出了’$userName’。為了避免這種情況,推薦這樣的變量輸出寫法:

  $!{userName}

  3, 變量聲明與賦值

  一般情況下,我們不推薦在html頁面中直接聲明Velocity變量,因?yàn)檫@會增加html界面的復(fù)雜度。如果確實(shí)有必要,可以使用下面的語句聲明變量并賦值:

  #set($userName=’hanmeimei’)

  請注意:Velocity的變量聲明都要帶著$符號。

  在LML中,我們經(jīng)常在所謂的后臺,也就是Action中給變量賦值,這樣在Action對應(yīng)的html模板中也可以直接使用該變量。可使用一下兩種方法:

  (1) 傳統(tǒng)的getter/setter

  (2) ViewBag.Add(key,value)

  相比之下,第二種非傳統(tǒng)的方式更快速。

  4, 算術(shù)運(yùn)算

  Velocity支持在模板中使用(+,—,*,/),例如:

  #set($a=1)

  #set($b=1)

  #set($c=$a + $b)

  C在算對的情況下等于2,算錯的情況下等于3.。有一個問題大家需要注意,我在使用四則運(yùn)算的時候,發(fā)現(xiàn)’—‘不起作用,最后經(jīng)過嘗試,發(fā)現(xiàn)需要在變量和運(yùn)算符之    間留一個空格,這樣就沒問題了。如果,你也遇到這樣的問題,也可以這么嘗試一下。

  5, 邏輯運(yùn)算

  支持一下幾個運(yùn)算符,就如同java一樣:

  &&:與。

  ||:或。

  !:非。

  6, 迭代

  #foreach ($item in $list)

  這是第 $velocityCount 個元素: $item

  #end

  $velocityCount,表示當(dāng)前序號。

  還要說一下我們在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,而后進(jìn)行迭代:

  #set( $list = ["a", "b", "c"])

  #foreach ($item in $list)

  $velocityCount

  #end

  還有一種情況,我們需要迭代從1到10,所有的整數(shù):

  #foreach ($item in [1..10])

  $velocityCount

  #end

  注意中間就是兩個點(diǎn)。

  查閱很多資料,都直接說明Velocity不能迭代數(shù)組,下面說明原因:

  對數(shù)組的訪問在Velocity中存在問題,因?yàn)閂elocity只能訪問對象的方法,而數(shù)組又是一個特殊的Array,所以雖然數(shù)組可以進(jìn)行循環(huán)列舉,但卻不能定位訪問特定位置 的   元素,如 strs[2],數(shù)組對固定位置元素的訪問調(diào)用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數(shù)組要么改成List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數(shù)組對象和要訪問的位置參數(shù),從而達(dá)到返回所需值的目的。

  Velocity支持迭代的數(shù)據(jù)類型有:Vector、Hashtable或者Array

  7, 條件判斷

  #if (條件1)

  #elseif (條件2)

  #else

  #end

  一直不是很理解Velocity的數(shù)據(jù)類型,所以在項目中最多使用的是String,就像這里的條件表達(dá)式,我們經(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語法并移交給模板,意思就是說相當(dāng)與把引入的文件copy到文件中。

  以上兩點(diǎn)摘自互聯(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)可以應(yīng)付自如了。是不是很簡單呢,我們希望的不就是簡單嗎,簡單所以快。寫的不好,敬請見諒。

  補(bǔ)充:

  LML支持在html模板中直接調(diào)用java方法,并可以向方法傳遞參數(shù)(字面值,或者Velocity變量),還可以輸出方法的返回值。當(dāng)然,為了避免模板頁面過于復(fù)雜,我們還是應(yīng)該盡量減少在模板中調(diào)用java方法。如果確實(shí)有必要調(diào)用,則需要現(xiàn)在模板頁面對應(yīng)的Action類上先行聲明:

  @Helper( { TestHelper.class })

  這樣就可以在html模板中調(diào)用:

  $!TestHelper.Test("$!{userName}")

  JAVA語言特點(diǎn)

  1.簡單性

  Java看起來設(shè)計得很像C++,但是為了使語言小和容易熟悉,設(shè)計者們把C++語言中許多可用的特征去掉了,這些特征是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載(overload)和多繼承特征,并且不使用主文件,免去了預(yù)處理程序。因?yàn)镴ava沒有結(jié)構(gòu),數(shù)組和串都是對象,所以不需要指針。Java能夠自動處理對象的引用和間接引用,實(shí)現(xiàn)自動的無用單元收集,使用戶不必為存儲管理問題煩惱,能更多的時間和精力花在研發(fā)上。

  2.面向?qū)ο?/p>

  Java是一個面向?qū)ο蟮恼Z言。對程序員來說,這意味著要注意應(yīng)中的數(shù)據(jù)和操縱數(shù)據(jù)的方法(method),而不是嚴(yán)格地用過程來思考。在一個面向?qū)ο蟮南到y(tǒng)中,類(class)是數(shù)據(jù)和操作數(shù)據(jù)的方法的集合。數(shù)據(jù)和方法一起描述對象(object)的狀態(tài)和行為。每一對象是其狀態(tài)和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。Java程序是用類來組織的。

  Java還包括一個類的擴(kuò)展集合,分別組成各種程序包(Package),用戶可以在自己的程序中使用。例如,Java提供產(chǎn)生圖形用戶接口部件的類(java.awt包),這里awt是抽象窗口工具集(abstract windowing toolkit)的縮寫,處理輸入輸出的類(java.io包)和支持網(wǎng)絡(luò)功能的類(java.net包)。

  3.分布性

  Java設(shè)計成支持在網(wǎng)絡(luò)上應(yīng)用,它是分布式語言。Java既支持各種層次的網(wǎng)絡(luò)連接,又以Socket類支持可靠的流(stream)網(wǎng)絡(luò)連接,所以用戶可以產(chǎn)生分布式的客戶機(jī)和服務(wù)器。

  網(wǎng)絡(luò)變成軟件應(yīng)用的分布運(yùn)載工具。Java程序只要編寫一次,就可到處運(yùn)行。

  4.編譯和解釋性

  Java編譯程序生成字節(jié)碼(byte-code),而不是通常的機(jī)器碼。Java字節(jié)碼提供對體系結(jié)構(gòu)中性的目標(biāo)文件格式,代碼設(shè)計成可有效地傳送程序到多個平臺。Java程序可以在任何實(shí)現(xiàn)了Java解釋程序和運(yùn)行系統(tǒng)(run-time system)的系統(tǒng)上運(yùn)行。

  在一個解釋性的環(huán)境中,程序開發(fā)的標(biāo)準(zhǔn)“鏈接”階段大大消失了。如果說Java還有一個鏈接階段,它只是把新類裝進(jìn)環(huán)境的過程,它是增量式的、輕量級的過程。因此,Java支持快速原型和容易試驗(yàn),它將導(dǎo)致快速程序開發(fā)。這是一個與傳統(tǒng)的、耗時的“編譯、鏈接和測試”形成鮮明對比的精巧的開發(fā)過程。


猜你感興趣:

1.java培訓(xùn)心得體會

2.java程序員職業(yè)生涯規(guī)劃范本

3.java工程師自我介紹范文3篇

4.java程序員面試自我介紹技巧

374406