OGNL調用靜態方法和屬性

ognl的全名是 Object-Graph Navigation Language 表示的是圖對象導航語言...我以爲它最厲害的一點是,經過"."來實現對象的導航...下面看他他的具體例子.咱們應該就能夠理解這個意思了express

注意,在說例子之前先說三點debug

(1)咱們這裏的例子都是訪問普通屬性和靜態方法..獲取的也只是普通屬性的值或者靜態方法返回的值..因此這裏通常是用<s:property value="ognl expression">來展現..其中,value裏面的值纔是ognl表達式.code

(2)action裏面咱們能夠有兩種方式從頁面中獲取值.一種是直接在action裏面寫屬性.這個是叫屬性驅動.還有一種是在action裏面放一個JavaBean的對象.這個叫模型驅動..具體的內容很少說了.下面說的action裏面的屬性,表示的是屬性驅動裏面的內容,若是說action裏面的對象,那就表示是模型驅動裏面的對象引用.xml

(3)最後說一點是值棧..值棧是一個存放對象的堆棧.是用Map來存放的,存放在值棧裏的內容咱們能夠經過ognl表達式來獲取...至於值棧都存放些什麼內容.能夠經過我以前說的<s:debug>標籤來讀取..對象

1 訪問值棧中的action的普通屬性 blog

<s:property value="username"/>get

這個很少說了.直接用對應的屬性名就OKit

2 訪問值棧中的act ion的對象的普通屬性(必須有對應的get set方法)io

(1)<s:property value="user.name"/>class

表示的是訪問act ion裏面的user對象裏面的name屬性

(2)<s:property value="student.class.size"/>

表示的是訪問act ion裏面的student對象裏面的class對象裏面的size屬性...這句話說的有點繞,可是其實很好理解.

只要有須要,裏面能夠嵌套任意多層.只要中間用"."來分隔就好了

3訪問值棧中對象的普通方法

(1)<s:property value="name.length()">

這裏訪問的是String對象(也就是name)裏面的length()這個方法..

(2)<s:property value="user.abc()"/>

這裏調用的是user對象裏面的abc()方法.訪問這個方法的返回值..若是沒有返回值,則爲空.

4訪問act ion中的普通方法

<s:property value="abc()">

訪問的是act ion中定義的方法...其實都很相似的...

5 訪問靜態方法

<s:property value="@com.test.util.S@abc()">

注意,兩個@是約定..也就是必須這麼寫.第一個@後面跟的是類的全名.第二個@後面跟的是對應的方法名.固然,這個方法必須是靜態的

 這個訪問靜態方法在struts2.1之後的版本里面須要設置一個屬性,不然系統默認是不支持訪問靜態方法的(struts2.0版本默認是支持訪問靜態方法的).具體的方法是在struts.xml裏面添加這麼一句

 <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

6 訪問靜態屬性

<s:property value="@com.test.util@parm"/>

這個和上面也相似...訪問的是靜態的屬性..

轉http://zzy603.iteye.com/blog/719491

 

 

重點是在struts.xml配置中加這麼一句話

1     <!-- 容許調用靜態方法和靜態屬性 -->
2     <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
相關文章
相關標籤/搜索