天天看點

Webwork 學習之路(二)前端OGNL試練

<b>閱讀目錄</b>

<a href="http://www.cnblogs.com/java-class/p/5016578.html#_label0">1.ognl 出現的意義</a>

<a href="http://www.cnblogs.com/java-class/p/5016578.html#_label1">2.ognl項目實戰</a>

   在mvc中,資料是在各個層次之間進行流轉是一個不争的事實。而這種流轉,也就會面臨一些困境,這些困境,是由于資料在不同世界中的表現形式不同而造成的:

a. 資料在頁面上是一個扁平的,不帶資料類型的字元串,無論你的資料結構有多複雜,資料類型有多豐富,到了展示的時候,全都一視同仁的成為字元串在頁面上展現出來。

b. 資料在java世界中可以表現為豐富的資料結構和資料類型,你可以自行定義你喜歡的類,在類與類之間進行繼承、嵌套。我們通常會把這種模型稱之為複雜的對象樹。此時,如果資料在頁面和java世界中互相流轉傳遞,就會顯得不比對。是以也就引出了幾個需要解決的問題;

c. 當資料從view層傳遞到controller層時,我們應該保證一個扁平而分散在各處的資料集合能以一定的規則設定到java世界中的對象樹中去。同時,能夠聰明的進行由字元串類型到java中各個類型的轉化;

d. 當資料從controller層傳遞到view層時,我們應該保證在view層能夠以某些簡易的規則對對象樹進行通路。同時,在一定程度上控制對象樹中的資料的顯示格式。

     如果我們稍微深入一些來思考這個問題,我們就會發現,解決資料由于表現形式的不同而發生流轉不比對的問題對我們來說其實并不陌生。同樣的問題會發生在java世界與資料庫世界中,面對這種對象與關系模型的不比對,我們采用的 解決方法是使用orm架構,例如hibernate,ibatis等等。那麼現在,在web層同樣也發生了不比對,是以我們也需要使用一些工具來幫助我們解決問題。為了解決資料從view層傳遞到controller層時的不比對性,struts2采納xwork     的一套完美方案。并且在此的基礎上,建構了一個完美的機制,進而比較完美的解決了資料流轉中的不比對性。ognl方案就應運而生

   ognl是object-graph navigation language的縮寫,它是一種功能強大的表達式語言,通過它簡單一緻的表達式文法,可以存取對象的任意屬性,調用對象的方法,

周遊整個對象的結構圖,實作字段類型轉化等功能。

a. ognl可以讓我們用非常簡單的表達式通路對象層【ognl支援對map的按鍵值查找】

b. 支援運算符(如+-*/),比普通的标志具有更高的自由度和更強的功能

c. 支援對象方法調用,如xxx.dosomespecial()

d. 支援類靜态的方法調用和值通路,表達式的格式為@[類全名(包括包路徑)]@[方法名 | 值名],例如:@java.lang.string@format('foo %s', 'bar')或@tutorial.myconstant@app_name

e. 支援指派操作和表達式串聯,如price=100, discount=0.8, calculateprice(price*discount),這個表達式會傳回80

f .通路ognl上下文(ognl context)和actioncontext

g.你也可以通過任意類對象的構造函數進行對象建立

h.ognl支援類似資料庫中的投影(projection) 和選擇(selection)。

投影就是選出集合中每個元素的相同屬性組成新的集合,類似于關系資料庫的字段操作。投影操作文法為 collection.{xxx},其中xxx 是這個集合中每個元素的公共屬性。

選擇就是過濾滿足selection 條件的集合元素,類似于關系資料庫的紀錄操作。選擇操作的文法為:collection.{x yyy},其中x 是一個選擇操作符,後面則是選擇用的邏輯表達式。而選擇操作符有三種:

? 選擇滿足條件的所有元素

^ 選擇滿足條件的第一個元素

$ 選擇滿足條件的最後一個元素

i. ognl是通常要結合struts 2的标志一起使用,主要是#、%和$這三個符号的使用。使用方法如下:

Webwork 學習之路(二)前端OGNL試練
Webwork 學習之路(二)前端OGNL試練

j. ognl 可以擷取背景 action get()set() 方法 傳送過來的資料靈活展示到前台

如果,您認為閱讀這篇部落格讓您有些收獲,不妨點選一下右下角的【推薦】 

如果,您希望更容易地發現我的新部落格,不妨點選一下左下角的【關注我】 

如果,您對我的部落格内容感興趣,請繼續關注我的後續部落格,我是【orson】 

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段 聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。 

轉載:http://www.cnblogs.com/java-class/p/5016578.html