1. 程式人生 > >我愛你,卻無法保證愛你一萬年

我愛你,卻無法保證愛你一萬年

用struts已經有五六年的時間了,可是真正的對OGNL熟悉嗎?我想我是不熟悉的,今天網上查了下資料,記錄下來,備忘
1.OGNL=Object Graph Navigation Language (俗稱物件圖導航語言)
2.struts框架將actionContext作為OGNL 上下文,將valueStack作為OGNL上下文的根物件,同時為了讓struts的action與servlet API解耦,又將application,parameters,request,session,attr作為命名物件,至於OGNL上下文根物件平級(自己理解(雖然與OGNL根物件平級,但只是一個索引,真正訪問裡面的物件,還是要加#的))。根物件的屬性,key訪問,非根物件要用#key訪問。
3.valueStack是個棧結構,棧的頂層是action物件,訪問valueStack預設訪問的是棧頂物件,所以訪問action中的屬性,可以省略#,直接屬性名稱即可
4.OGNL表示式可以做什麼?
a.OGNL訪問物件屬性

b.OGNL訪問物件方法

c.OGNL訪問靜態屬性

d.OGNL呼叫靜態方法

e.OGNL 使用索引訪問陣列和列表

f.OGNL操作符運算

g.OGNL訪問集合的偽屬性
size,isEmpty,keys,values,iterator.hasNext,iterator.next
5.何時用%{}?
struts標籤中value值,什麼時候是OGNL表示式(OGNL表示式會去OGNL上下文中搜索計算該值得出結構)?
struts標籤中value屬性型別是Object則一定是OGNL表示式,如果value屬性不是物件型別,則需要用%{}來強制使用,保證其為OGNL表示式。例如:a: 這裡的value是物件型別,可以省略%{},struts框架會根據value的值,去valueStack中查詢key為該value的值得物件,如果找到了返回結構,找不到什麼都不返回。 會根據 i love you 去valueStack中查詢,查不能什麼都不輸出,但是如果是為了輸出i love you 字串的話,可以將其強制為字串,在i love you 外面將引號這樣返回的結果就是 i love you。b:textfield標籤,其value屬性的型別是字串,如果要用OGNL表示式必須使用%{}。
6.OGNL投影
將集合中的資料想象成資料庫表中的資料,投影,就是從這張表中取出一列所構成的一個新的集合。

7OGNL過濾(選擇)
//取出name為張三的所有物件
10}”/>//取出age值大10的第一個物件
10}”/>取出age值大10的最後一個物件