OGNL調用靜態方法和屬性


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

注意,在說例子以前先說三點

(1)我們這里的例子都是訪問普通屬性和靜態方法..獲取的也只是普通屬性的值或者靜態方法返回的值..所以這里一般是用<s:property value="ognl expression">來展示..其中,value里面的值才是ognl表達式.

(2)action里面我們可以有兩種方式從頁面中獲取值.一種是直接在action里面寫屬性.這個是叫屬性驅動.還有一種是在action里面放一個JavaBean的對象.這個叫模型驅動..具體的內容不多說了.下面說的action里面的屬性,表示的是屬性驅動里面的內容,如果說action里面的對象,那就表示是模型驅動里面的對象引用.

(3)最后說一點是值棧..值棧是一個存放對象的堆棧.是用Map來存放的,存放在值棧里的內容我們可以通過ognl表達式來獲取...至於值棧都存放些什么內容.可以通過我之前說的<s:debug>標簽來讀取..

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

<s:property value="username"/>

這個不多說了.直接用對應的屬性名就OK

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

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

表示的是訪問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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM