Struts2中OGNL的解析

OGNL是Object Graphic Navigation Language的縮寫,顧名思義,對象圖導航語言。它是struts2框架的默認的表達式語言。
通過OGNL,我們可以在jsp的頁面中很方便獲取一些我們所需要的值。那麼,能獲取哪些值,怎麼獲取的這些值?

這裏我們先清楚三個概念:ActionContext,ValueStackStackContext.
這裏寫圖片描述

ActionContext:Action的上下文,每一次的action請求(客戶端行爲)都會創建一個ActionContext,通過ActionContext context = ActionContext.getContext()獲取。context可以獲取servlet的三大作用域。

context.getParameters() //request
context.getSession()  //session
context.getApplication() //application

ValueStack 值棧,對於每次請求也會創建一個valueStack.那麼什麼樣的數據存放在裏面?一般來說,裏面存放action的相關的信息 ,比如action的屬性,方法,以及其他的對象。因爲ValueStack爲根對象,而在jsp頁面可以直接的訪問根對象,所以可以直接訪問。其爲棧的結構,先進的會被壓入棧底。那麼如果對於有兩個屬性相同的同時被壓入了值棧中(比如兩個類中都有兩個相同的屬性username,二者之間通過服務器端的跳轉方式,即轉發,那麼將被同時的壓入同一個值棧),這時候取值是如果只寫了username,那麼取到的將是棧頂的相應值。

StackContext:用於存放值的。因爲不是根元素,取值的時候,需要加#號。
這裏寫圖片描述

在我們發出一個請求後,首先會創建一個ActionContext,然後創建一個值棧valueStack,初始化相應的action的屬性後,存入到valueStack中。然後再調用相應的action的方法。

在使用OGNL的時候,我們需要注意#,$,%的區別:

#號:
StarkContext中相應的獲取時,需要加#
$號1.在國際化資源文件中,引用OGNL表達式
2.在struts.xml文件中,引用OGNL表達式
%號:
1.使用%{}可以取出保存在值堆棧中的Action對象,直接調用它的方法
2.如果Action繼承了ActionSupport,那麼在頁面標籤中可以使用%{getText('key')}獲取國際化信息

對於OGNL的具體的語言,可以查看其官方文檔說明。

發佈了76 篇原創文章 · 獲贊 48 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章