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的根對象的屬性時可以省略對象名,訪問其它命名對象時需要在對象名前添加#前綴。