OGNL的使用----Stack Context中的對象與訪問

Object Graph Navigation Language

 

使用Struts2標籤必須先導入標籤庫,在頁面使用如下代碼導入Struts2標籤:
<%@taglib prefix="s" uri="/struts-tags"%>

 

 

根對象的訪問:

傳統的OGNL表達式求值中,系統會假設只有一個根對象。如果系統的Stack Context中包含兩個對象,foo和bar,它們在Context中的名字分別爲foo和bar,並將foo設置爲Context的根對象。

 

訪問根對象foo的屬性: #foo.blah或blah
訪問其它對象:  #bar.blah

 

如果要訪問的屬性屬於根對象,則可以直接訪問該屬性,否則使用一個名作爲前綴修飾屬性。

 

 

Struts2提供的命名對象

 

Struts2使用標準的Context進行OGNL表達式語言求值,OGNL的頂級對象是一個Map類型實例對象Context,其根對象就是ValueStack。要訪問ValueStack中的屬性,可以通過以下方式:${bar}


Struts2提供了一些命名對象,但這些對象不是Stack Context的根對象,它們只是存在於Stack Context中,所以要訪問這些對象時需要使用#前綴來指明。


(1).parameters對象:用於訪問Http請求參數,如:#parameters.foo,  #parameters['foo']。用於返回調用HttpServletRequest的getParameter("foo")的返回值。


(2).request對象:用於訪問HttpServletRequest的屬性。如:#request['foo'],  #request.foo。用於返回調用HttpServletRequest的getAttribute("foot")的返回值。


(3).session對象:用於訪問HttpSession的屬性。如:#session['foo'],  #session.foo。用於返回調用HttpSession的getAttribute("foo")的返回值。


(4).application對象:用於訪問ServletContext的屬性。如:#application['foo'],  #application.foo。用於返回調用ServletContext的getAttribute("foo")的返回值。


(5).attr對象:該對象將依次搜索如下對象:PageContext,  HttpServletRequest,  HttpSession,  ServletContext中的屬性。

 

當系統創建的Action實例後,該Action實例已經被保存到ValueStack中,所以無需寫#即可直接訪問Action屬性。

 

 

Stack Context中的對象:

Stack Context---ValueStack(根對象)
                        ---parameters(命名對象)
                        ---request(命名對象)
                        ---session(命名對象)
                        ---application(命名對象)
                        ---attr(命名對象)

 

訪問Stack Context的根對象的屬性時可以省略對象名,訪問其它命名對象時需要在對象名前添加#前綴。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章