日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2的OGNL表达式(二)

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2的OGNL表达式(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面說說OGNL表達式的訪問情況:

OGNL表達式能訪問:訪問屬性訪問方法訪問字體對象,訪問靜態屬性和方法,訪問構造方法,訪問數組訪問集合 – 投影、選擇(? ^ $)

1,OGNL輸出常量值

<s:property value="常量值"/>可以輸出字符串常量.

字符串常量(string literal)
? ? 以單引號或雙引號括起來的字符串,例如:‘Hello World’和”Hello World”.在JAVA中,不能用單引號來界定字符串常量,而在OGNL中是可以的。不過特別要注意的是:如果是單個字符的字符串常量,則必須使用雙引號來界定,例如:“S”。OGNL的字符串也支持轉義序列,例如:要在JSP頁面中輸出”You said ,”Hello World”.”,那么可以使用<s:property>標簽,如下:
<s:property value=“’You said,\”Hello World\”.’”/>
? ? ? 注意:不要忽略了用于界定整個常量字符串的單引號。如果沒有寫單引號,那么整個字符串將不會被看成是字符串常量,而是被當作根對象的屬性名,從而導致錯誤。
字符常量(Character literal)
? ? ?以單引號括起來的字符。例如,‘H’。注意,不能使用雙引號,否則將被看成是字符串常量。
數值常量(Numeric literal)
除了Java中的int,long,float,double外,OGNL還讓你用“B”或“b”后綴指定BigDecimal常量,用“H”或”h”后綴指定BigInteger常量,例如,123(int常量),123l(long常量),123.35f(float常量),123b(BigDecimal常量),123h(BigInteger常量)。


2,獲取Action中的屬性值或者Action中的對象的某某屬性值

注意這里的username是action中的屬性,user是action中的屬性對象,因為action是放在值棧中的所以不需要使用#字號訪問

訪問屬性:<s:property value="username"/> 訪問對象屬性(get和set):<s:property value="user.age"/> 訪問對象方法:<s:property value="user.getName()"/> 訪問對象屬性(get和set):<s:property value="employee.manager.name"/>


3,調用Action的對象里面的普通方法

? ? ? ?默認的會把Action放到值棧里面,而值棧在訪問的時候,并不需要值棧的名字
當我們調用<s:property value="user.getVOMethod()"/>的時候,它會自動到值棧里面查找Action對象里面有沒有user對象,然后它就發現有user,然后它就再找user里面有沒有getVOMethod()方法,然后它發現有,于是調用getVOMethod(),實際上調用User中的getVOMethod()方法的過程與獲取表單中的姓名密碼的方式都是相同的,都是到值棧里面查找,找是否存在user對象,如果存在,接著查找user中是否存在某某屬性或方法

訪問類對象的方法:<s:property value="employee.eat()"/>訪問action的方法:<s:property value="add()"/>

4,訪問Action中的靜態屬性和方法

以@開頭,后面跟上具體的包名,然后@加上靜態方法

<span style="font-size:24px;">比如<s:property value="@com.jadyer.action.LoginAction@getStatic()"/></span>

OGNL支持調用類中的靜態方法和靜態字段,格式如下:

@class@method(args)//調用靜態方法 @class@field//訪問靜態字段(public權限)

其中class必順給出完整的類名。例如:@java.lang.String@valueOf(5)。如果省略class,那么默認使用類是java.lang.Math

訪問靜態方法:<s:property value="@com.neusoft.ognl.StaticSample@ma()"/> 訪問靜態屬性:<s:property value="@com.neusoft.ognl.StaticSample@STR"/> 訪問Math靜態方法:<s:property value="@@max(4,7)"/>


5,訪問的構造方法

<span style="font-size:24px;">訪問構造方法:<s:property value="new com.neusoft.ognl.User(44)"/></span>

6,OGNL創建和訪問集合數組

a,OGNL創建集合

? ? 如果需要一個集合元素的時候(例如List對象或者Map對象),可以使用OGNL中同集合相關的表達式。可以使用如下代碼直接生成一個List對象

創建集合:<s:property value="{'a','b','c'}"/> <!--輸出結果為:[a,b,c]--> 集合類型:<s:property value="{'a','b','c'}.getClass().getName()"/><!--輸出類型名稱是java.util.ArrayList--> ? ? 如下代碼可以直接生成一個Map對象:

創建Map:<s:property value="#{'mm':'MM','nn':'NN'}"/>"<!--輸出結果為:{mm=MM,nn=NN}--> Map類型:<s:property value="#{'mm':'MM','nn':'NN'}.getClass().getName()"/><strong style="color: rgb(255, 0, 0);"> </strong><!--輸出類型名稱是java.util.LinkedHashMap-->

b,OGNL訪問集合

??

<li>訪問List:<s:property value="users"/> </li> <li>訪問List中某個元素:<s:property value="users[0]"/> </li> <li>訪問List中元素某個屬性的集合: <s:property value="users.{age}"/></li> <li>訪問List中元素某個屬性的集合中的特定值: <s:property value="users.{age}[0]"/>|<s:property value="users[0].age"/> </li> <li>訪問Set:<s:property value="managers"/></li> <li>訪問Set中某個元素:<s:property value="managers[0]"/></li><!-- 錯誤,無法根據下標訪問元素 --> <li>訪問Map:<s:property value="manMap"/></li> <li>訪問Map中某個元素:<s:property value="manMap.mm1"/>|<s:property value="manMap['mm1']"/>|<s:property value="manMap[\"mm1\"]"/></li> <li>訪問Map中所有的key:<s:property value="manMap.keys"/></li> <li>訪問Map中所有的value:<s:property value="manMap.values"/></li> <li>訪問容器的大小:<s:property value="manMap.size()"/></li><strong> </strong>
c,集合中的偽屬性

? ? OGNL能夠引用集合的一些特殊的屬性,這些屬性并不是JavaBeans模式,例如size(),length()等等. 當表達式引用這些屬性時,OGNL會調用相應的方法,這就是偽屬性.

總結

以上是生活随笔為你收集整理的struts2的OGNL表达式(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。