日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OGNL 详解

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OGNL 详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Struts2?OGNL詳解

1.概念:

OGNLObject-Graph?Navigation?Language的縮寫,全稱為對象圖導航語言,是一種功能強大的表達式語言,它通過簡單一致的語法,可以任意存取對象的屬性或者調用對象的方法,能夠遍歷整個對象的結構圖,實現對象屬性類型的轉換等功能。OGNL表達式為Struts2標簽庫服務,就像EL表達式為JSTL服務。因此要學習Struts2標簽庫,就要了解OGNL

?

2.OGNL層次結構:

注意:上下文中的根對象(ValueStack)可以直接使用名來訪問或直接使用它的屬性名訪問它的屬性值。否則要加前綴“#key”。

ValueStack對象。這個對象貫穿整個Action的生命周期(每個Action類的對象實例會擁有一個ValueStack對象)。當?Struts?2接收到一個.action的請求后,會先建立Action類的對象實例,但并不會調用Action方法,而是先將Action類的相應屬性放到?ValueStack對象的頂層節點(ValueStack對象相當于一個棧)。

Action中獲得ValueStack對象:ActionContext.getContext().getValueStack()

l?????????Top語法

使用Top獲取值棧中的第二個對象:<s:property?value="[1].top.對象"/>

l?????????N語法

使用N獲取值棧中的第二個對象:<s:property?value="[N].對象"/>

l?????????@語法

調用action中的靜態方法:<s:property?value="@vs1@靜態方法"/>?vs:值棧?1:表示第一個。

?

?

3.OGNL?API

OGNLAPI看起來就是兩個簡單的靜態方法:

??public?static?Object?getValue(?Object?tree,?Map?context,?Object?root?)?throws?OgnlException;

??public?static?void?setValue(?Object?tree,?Map?context,?Object?root,?Object?value?)?throws?OgnlException

1)?OGNL表達式的計算是圍繞OGNL上下文進行的。

OGNL上下文實際上就是一個Map對象,由ognl.OgnlContext類表示。它里面可以存放很多個JavaBean對象。它有一個上下文根對象。

上下文中的根對象可以直接使用名來訪問或直接使用它的屬性名訪問它的屬性值。否則要加前綴“#key”。

2)?Struts2的標簽庫都是使用OGNL表達式來訪問ActionContext中的對象數據的。如:<s:propertyvalue="xxx"/>

3)?Struts2ActionContext設置為OGNL上下文,并將值棧作為OGNL的根對象放置到ActionContext中。

4)?值棧(ValueStack)?

可以在值棧中放入、刪除、查詢對象。訪問值棧中的對象不用“#”。

Struts2總是把當前Action實例放置在棧頂。所以在OGNL中引用Action中的屬性也可以省略“#”。

5)?調用ActionContextput(key,value)放入的數據,需要使用#訪問。

?

4.OGNL中三個重要的符號

"#"的三種主要用法

訪問OGNL上下文和Action上下文,#相當于ActionContext.getContext()

名稱

作用

例子

parameters

包含當前HTTP請求參數的Map

#parameters.id[0]作用相當于

request.getParameter("id")

request

包含當前HttpServletRequest的屬性(attribute)Map

#request.userName相當于

request.getAttribute("userName")

session

包含當前HttpSession的屬性(attribute)的Map

#session.userName相當于

session.getAttribute("userName")

application

包含當前應用的ServletContext的屬性(attribute)的Map

#application.userName相當于

application.getAttribute("userName")

attr

用于按request?>?session?>?application順序訪問其屬性(attribute

?

?

用于過濾和投影集合

構造Map,如#{key1:value1,key2:value2...}

"%"的用途

在標志的屬性為字符串類型時,計算OGNL表達式的值

"$"的主要用途

用于國際化資源文件中,引用OGNL表達式的值

在Struts2配置文件中,引用OGNL表達式

?

轉載于:https://www.cnblogs.com/hezhiyaun/p/5505283.html

總結

以上是生活随笔為你收集整理的OGNL 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。