Struts2:筆記3

值棧:(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> 標籤顯示異常消息。

相關文章
相關標籤/搜索