OGNL是Struts 2框架的默認(rèn)表達(dá)式語言,增強(qiáng)了Struts 2的數(shù)據(jù)訪問能力,同時(shí)簡化了代碼。
Struts 2的OGNL表達(dá)式
標(biāo)準(zhǔn)的OGNL會設(shè)定一個(gè)根對象(root對象)。假設(shè)使用標(biāo)準(zhǔn)OGNL表達(dá)式來求值(不使用Struts 2的OGNL表達(dá)式),如果OGNL上下文(OgnlContext Map類型)有兩個(gè)對象:foo對象,在OgnlContext中名稱為foo;bar對象,在OgnlContext中名稱為bar。同時(shí)foo對象被設(shè)置為根對象(root)。則利用下面的OGNL表達(dá)式求值:
// 返回foo.getBlah() #foo.blah //返回bar.getBlah() #bar.blah //返回foo.getBlah() ,因?yàn)?/span>foo為根對象 blah |
★說明★
使用OGNL是非常簡單的,如果要訪問的對象不是根對象,如示例中的bar對象,則需要使用命名空間,用“#”來標(biāo)識,如“#bar”;如果訪問一個(gè)根對象,則不用指定命名空間,可以直接訪問根對象的屬性。
在Struts 2框架中,值棧(Value Stack)就是OGNL的根對象,假設(shè)值棧中存在兩個(gè)對對象實(shí)例:Man和Animal,這兩個(gè)對象實(shí)例都有一個(gè)name屬性,Animal有一個(gè)species屬性,Man有一個(gè)salary屬性,假設(shè)Animal在值棧的頂部,Man在Animal后面,下面的代碼片斷會幫助讀者更好地理解OGNL表達(dá)式:
// 調(diào)用animal.getSpecies() species // 調(diào)用man.getSalary() salary // 調(diào)用animal.getName(),因?yàn)?/span>Animal位于值棧的頂部 name |
最后一行示例代碼,返回的是animal.getName()返回值,即返回了Animal的name屬性,因?yàn)?/span>Animal是值棧的頂部元素,OGNL將從頂部元素搜索,所以會返回Animal的name屬性值。如果要獲得Man的name值,則需要如下代碼:
Struts 2允許在值棧中使用索引,示例代碼如下所示:
[0].name?? // 調(diào)用animal.getName() [1].name?? // 調(diào)用man.getName() |
posted on 2009-08-15 17:18
jadmin 閱讀(88)
評論(0) 編輯 收藏