Struts2框架詳解(三)

OGNL概述

  • 之前在web階段,學習過EL表達式,EL表達式在jsp中獲取域對象裏面的值
  • OGNL是一種表達式,這個表達式功能更加強大

OGNL(Object-Graph-Navigation-Language),即對象圖導航語言,它是一種功能強大的開源表達式語言,使用這種表達式語言,可以通過某種表達式語法,存取Java對象的任意屬性,調用Java對象的方法,同時能夠自動實現必要的類型轉換。如果把表達式看作是一個帶有語義的字符串,那麼OGNL無疑成爲了這個語義字符串與Java對象之間溝通的橋樑。

注意:

  • 一般把OGNL與Struts2標籤一起使用來操作值棧
  • OGNL不是Struts2的一部分,因此使用OGNL的時候需要先導入jar包,在Struts2中提供了jar包

特點:

案例:(使用ognl+struts2標籤實現計算字符串長度的功能)

(1)使用JSTL的時候,導入jar包之外,還需要在jsp頁面中引入標籤庫,而使用struts2標籤的時候,也需要引入標籤庫

(2)使用struts2標籤實現操作

 

值棧

概述:

  • 之前在web階段,在servlet裏面進行操作,把數據放到域對象裏面,在頁面中使用EL表達式獲取到,域對象在一定範圍內,存值和取值
  • 在struts2裏面提供了一種存儲機制,類似於域對象,是值棧,也可以存值和取值(在action裏面,把數據放到值棧裏面,在頁面中獲取到值棧數據)

值棧存儲位置:

  • 每次訪問action的時候,都會創建action對象
  • 在每個action對象裏面都會有一個值棧對象(只有一個)

servlet和action區別:

  • servlet:默認在第一次訪問時候創建,創建一次,單實例對象
  • action:訪問時候創建,每次訪問action的時候,都會創建action對象,創建多次,多實例對象

 

獲取值棧對象

常用方式:使用ActionContext類裏面的方法得到值棧對象

//獲取ActionContext類的對象
ActionContext context = ActionContext。getContext();

//調用方法得到值棧對象
ValueStack stack1 = context.getValueStack();

 

值棧內部結構

值棧分爲兩部分,第一部分是root(list集合),第二部分是context(map集合)

第一部分:(list集合)

第二部分:(map集合)

 

 struts2裏面標籤 s:debug,使用這個標籤可以查看值棧結構和存儲值

(1)訪問action,執行action的方法有返回值,配置返回值到jsp頁面中,在jsp頁面中使用這個標籤

點擊超鏈接看到結構

 

(2)在action沒有做任何操作,棧頂元素是 action引用

- action對象裏面有值棧對象

- 值棧對象裏面有action引用

 

向值棧放數據

第一種 獲取值棧對象,調用值棧對象裏面的 set 方法

第二種 獲取值棧對象,調用值棧對象裏面的  push方法

第三種 action定義變量,生成變量的get方法

 

向值棧放對象

1 實現步驟

第一步 定義對象變量

第二步 生成變量的get方法

第三步 在執行的方法裏面向對象中設置值

 

向值棧放list集合

第一步 定義list集合變量

第二步 生成變量的get方法

第三步 在執行的方法裏面向list集合設置值

 

從值棧獲取數據

1 使用struts2的標籤+ognl表達式獲取值棧數據

<s:property value=”ognl表達式”/>

 

獲取字符串

1 向值棧放字符串

2 在jsp使用struts2標籤+ognl表達式獲取

 

獲取對象

1 向值棧放對象

2 在頁面中獲取值

 

獲取List集合

第一種方式:

第二種方式:

第三種方式:

 

其他操作

1 使用set方法向值棧放數據,獲取

 

2 使用push方法向值棧放數據,獲取

(1)使用push方法設置值,沒有名稱,只有設置的值

(2)向值棧放數據,把向值棧放數據存到數組裏面,數組名稱 top,根據數組獲取值

 

 

 

 

 

 

 

 

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