Struts2 「.」和「[]」操作符:獲取ActionContext中的所有內容

2020-07-16 10:04:56
Struts2 框架在 OGNL 的基礎上得到了增強,提高了 Struts2 對資料的存取能力。在 Struts2 框架中,OGNL 上下文作用於 Struts2 中的 ActionContext 物件,ActionContext 物件是 Struts2 框架中的一個核心物件。

在 Struts2 框架中,當接收到一個 Action 請求時,Struts2 框架會建立 ActionContext 物件併範例化值棧等物件,由於 OGNL 上下文作用於 ActionContext 物件,因此通過 OGNL 表示式可以獲取 ActionContext 中的所有內容,而獲取這些內容時使用的是“.”和“[]”操作符。

語法:

#application|request|session|attr|parameters.name

#application|request|session|attr|parameters.['name']

這兩個操作符用於獲取 ActionContext中 的所有內容,即獲取 application、request、session、attr 和 parameters。

上述程式碼分別相當於呼叫了 application.getAttribute("name")、request.getAttribute("name")、session.getAttribute("name")、request.getParameter("name")方法。

範例

本範例使用“#”來讀取 ActionContext 物件中的一些數值,然後將獲取的資料輸出到頁面中。

建立 OgnlAction.action 檔案,在其中定義變數和編寫 get 方法和 set 方法。

建立 index.jsp 檔案,應用“#”獲取相應資源的屬性,關鍵程式碼如下:
<body>//使用“#”獲取屬性
  <p>request.userName:<s:property value="#request.userName"/></p>
  <p>session.userName:<s:property value="#session.userName"/></p>
  <p>application.userName:<s:property value="#application.userName"/></p>
  <p>attr.userName:<s:property value="#attr.userName"/></p>
</body>}
執行結果如下:
request.userName:這個屬性來自request
session.userName:這個屬性來自session
application.userName:這個屬性來自application