值棧:(ValueStack)數組
1)、helloWorld 時,${productName} 讀取 productName 值,實際上該屬性並不在 request 等域對象中,而是從值棧中獲取的。session
2)、能夠從 ActionContext 中獲取值棧對象數據結構
3)、值棧分爲兩個邏輯部分:app
> Map 棧:其實是 OgnlContext 類型,是個Map,也是對 ActionContext 的一個引用,裏邊保存着各類 Map:requestMap、sessionMap、applicationMap、parametersMap、attrspa
> 對象棧:其實是 CompoundRoot 類型,是一個使用 ArrayList 定義的棧。裏邊保存各類和當前 Action 實例相關的對象。是一個數據結構意義的棧。code
在Jsp 頁面上能夠利用 OGNL 訪問到值棧裏的對象屬性。對象
若但願訪問值棧中 ContextMap 中的數據,須要給 OGNL 表達式加上一個前綴字符 #。若是沒有前綴字符 # ,搜索將在 ObjectStack 裏進行。io
Struts 的 property 標籤用來輸出值棧中的一個屬性值。ast
讀取 ObjectStack 裏的對象的屬性:配置
--若想訪問 ObjectStack 裏的某個對象的屬性,能夠使用如下幾種形式之一:
object.propertyName、object['propertyName']、object["propertyName"]
--ObjectStack 裏的對象能夠經過一個從零開始的下標來引用。棧頂對象用[0]來引用,它下面那個對象能夠用[1]來引用。[0].message
--[n] 的含義是從第 n 個開始搜索,而不是隻搜索第 n 個對象。
--若從棧頂對象開始搜索,則能夠省略下標部分。 message
--結合 s:property 標籤:<s:property value="[0].message"/> <s:property value="message"/>
默認狀況下,Action 對象會被 Struts2 自動的放到值棧的棧頂。
讀取 ContextMap 裏的對象的屬性:
--若想訪問 ContextMap 裏的某個對象的屬性,能夠使用如下幾種形式之一:
#object.propertyName、#object['propertyName']、#object["propertyName"]
--示例:
返回 session 中的 code 屬性:#session.code
返回 request 中的 customer 屬性的 name 屬性值:#request.customer.name
返回域對象(按 request、session、application的順序)的 lastAccessDate 屬性:#attr.lastAccessDate
能夠利用 OGNL 調用:任何一個 Java 類裏的靜態字段或方法。被壓入到 ValueStack 的對象上的公共字段和方法。
--調用靜態字段或方法的語法:
@fullyQualifiedClassName@fieldName
@fullyQualifiedClassName@methodName(argumentList)
--調用一個實例字段或方法的語法,其中 object 是 ObjectStack 棧裏的某個對象的引用
@.object.fieldName: [0]date
@.object.methodName(argumentList):[0].repeat(3, "hello");
訪問數組類型的屬性:
能夠使用下標訪問數組中指定的元素:colors[0]。
能夠經過調用其 length 字段查出給定數組中有多少個元素:colors.length
訪問 List 類型的屬性:
能夠使用下標訪問 List 中指定的元素:colors[0]
能夠經過調用其 size 方法或專用關鍵字 size 的方法查出給定的 List 的長度:colors.size 或 colors.size()
能夠經過使用 isEmpty() 方法或專用關鍵字 isEmpty 來得知給定的 List 是否是空。colors.isEmpty 或 colors.isEmpty()
還能夠使用 OGNL 表達式來建立 List,建立一個 List 與聲明一個 Java 數組是相同的。
訪問 Map 類型的屬性:
檢索某個 Map 的值:map[key]
得出某個 Map 的鍵值對的個數:使用 size 或 size()
檢查 Map 是否爲空:使用 isEmpty 或 isEmpty()
異常處理:
exception-mapping 元素:配置當前 action 的聲明式異常處理。
它有兩個屬性:exception:指定須要補貨的異常類型。異常的全類名。
result:指定一個響應結果,該結果將在補貨到指定異常時被執行。
能夠經過 global-exception-mapptings 元素爲應用程序提供一個全局性的異常捕獲映射。但在其元素下 聲明的任何 exception-mapping 元素只能引用在 global-results 元素下聲明的某個 result 元素。
聲明式異常處理機制由 ExceptionMappingInterceptor 攔截器負責處理,該攔截器會向 ValueStack 中天劍兩個對象:exception、excepionStack
能夠在視圖上經過 <s:property> 標籤顯示異常消息。