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>