Struts2 OGNL

OGNL操作 (讀取值棧裏面的屬性值)

其實就是利用OGNL表達式獲取值棧裏面的屬性值,

值棧裏面有兩個主要部分,一個是對OgnlContext的引用context

一個是CompoundRoot類型的root是真正數據結構上的棧對象,


值棧裏面的屬性值

對於對象棧

對象棧裏面的對象的屬性

方式

object["propertyName"] object['propertyName'] object.propertyName

默認從對象棧裏的第一個對象查找看後面的【N】語法

Map棧

request,session,application的一個屬性值或是一個請求參數的值

方式

#request.屬性值

#session.屬性值

#application.屬性值

#attr.屬性值(這個默認按照PageContext,request,session,application)對象檢索屬性。

操作符

@
調用靜態方法和靜態字段
@全類名@字段名 
@java.lang.Math@PI
@全類名@方法名
@java.lang.String@min(3,5)
不給出類名,默認是java.lang.Math包
@@min(5,3)
@@PI
#
訪問Map棧裏面的屬性值
構建Map對象
#{"key1":"value1","key2":"value2"},構建List不需要使用#
%
struts2標籤的強制解析%{},%{''}''裏面是不解析的String。
$
el表達式

struts2中的命名對象

這些命名對象保存到值棧中的Map棧裏面,訪問需要#
request
session
application
attr
parameters

本質是一個HttpServletRequest對象中請求參數構造的一個Map對象。

在調用Action實例之前就已經創建好了,和HttpServletRequest沒有了任何關係


[N]語法

從值棧的對象棧裏面第幾個對象開始訪問,默認第一個對象開始訪問,可以省略[0]

top關鍵字

結合[N]語法可以取出值棧任意位置的對象,
[0].top 取出第一個對象,[0].top.name第一個對象的name屬性。

ActionContext

是一個OgnlContext的封裝,提供解耦方式訪問Servlet API的方法,其實也就是

從OgnlContext裏面去的值。

lambda表達式

格式:[]
使用lambda來計算階乘
#fact=:[#this<=1?1:#this*#fact(#this-1)],#fact(30H)
整個ognl表達式是一個逗號表達式

投影(projection)和選擇(selection)

ognl提供了一種簡單的方法對集合中的每個元素調用相同的方法,或是抽取相同的屬性,並將結果保存爲一個新的列表,稱爲投影
例如employees保存了employee對象
#employees.(name)將會得到一個保存了所有employee對象name的列表,
對於列名還可以進行索引#employees.(name)[0],不過當列表爲空時會拋出異常。

將集合中的元素按照某種規則抽取出來保存爲一個新的列表,稱爲選擇。當前正在迭代的元素用#this表示
#employees.(?#this.age>20) 得到所有age大於20的employee對象的列表
選擇匹配的所有元素
^ 選擇匹配的第一個元素
$ 選擇匹配的最後一個元素


集合的僞屬性

List,Map,Set
size 
isEmpty
List
iterator
Set
iterator
Map
keys,values
Iterator
next,hasNext

struts2標籤標籤屬性解析規則

所有非字符串都會被當做OGNL表達式解析
所有的字符串都會解析%{}這種語法結構,{}裏面的將被解析。









#request.屬性值
#session.屬性值
#application.屬性值
#attr.屬性值(這個默認按照PageContext,request,session,application)對象檢索屬性。
發佈了28 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章