最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門

 更新時(shí)間:2015年11月26日 16:07:10   作者:浮云中的毛驢  
這篇文章主要介紹了深入解析在Java的Struts框架中ONGL表達(dá)式的基礎(chǔ)使用入門,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下

首先了解下OGNL的概念:
OGNL是Object-Graph Navigation Language的縮寫,全稱為對象圖導(dǎo)航語言,是一種功能強(qiáng)大的表達(dá)式語言,它通過簡單一致的語法,可以任意存取對象的屬性或者調(diào)用對象的方法,能夠遍歷整個(gè)對象的結(jié)構(gòu)圖,實(shí)現(xiàn)對象屬性類型的轉(zhuǎn)換等功能。

此外,還得先需弄懂OGNL的一些知識(shí):
1.OGNL表達(dá)式的計(jì)算是圍繞OGNL上下文進(jìn)行的。
OGNL上下文實(shí)際上就是一個(gè)Map對象,由ognl.OgnlContext類表示。它里面可以存放很多個(gè)JavaBean對象。它有一個(gè)上下文根對象。
上下文中的根對象可以直接使用名來訪問或直接使用它的屬性名訪問它的屬性值。否則要加前綴“#key”。

2.Struts2的標(biāo)簽庫都是使用OGNL表達(dá)式來訪問ActionContext中的對象數(shù)據(jù)的。如:<s:propertyvalue="xxx"/>。

3.Struts2將ActionContext設(shè)置為OGNL上下文,并將值棧作為OGNL的根對象放置到ActionContext中。

4.值棧(ValueStack) :
可以在值棧中放入、刪除、查詢對象。訪問值棧中的對象不用“#”。
Struts2總是把當(dāng)前Action實(shí)例放置在棧頂。所以在OGNL中引用Action中的屬性也可以省略“#”。

5.調(diào)用ActionContext的put(key,value)放入的數(shù)據(jù),需要使用#訪問。


OGNL中重要的3個(gè)符號(hào):#、%、$:
#、%和$符號(hào)在OGNL表達(dá)式中經(jīng)常出現(xiàn),而這三種符號(hào)也是開發(fā)者不容易掌握和理解的部分,需要時(shí)間的積累才漸漸弄清楚……
1.#符號(hào)
#符號(hào)的用途一般有三種。

訪問非根對象屬性,例如#session.msg表達(dá)式,由于Struts 2中值棧被視為根對象,所以訪問其他非根對象時(shí),需要加#前綴。實(shí)際上,#相當(dāng)于ActionContext. getContext();#session.msg表達(dá)式相當(dāng)于ActionContext.getContext().getSession(). getAttribute("msg") 。

用于過濾和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name=='pla1'}.{age}[0]。

用來構(gòu)造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

2.%符號(hào)
%符號(hào)的用途是在標(biāo)志的屬性為字符串類型時(shí),計(jì)算OGNL表達(dá)式的值,這個(gè)類似js中的eval,很暴力。
3.$符號(hào)
$符號(hào)主要有兩個(gè)方面的用途。

在國際化資源文件中,引用OGNL表達(dá)式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在${min}同${max}之間。

在Struts 2框架的配置文件中引用OGNL表達(dá)式,例如:

<validators>  
  <field name="intb">  
      <field-validator type="int">  
      <param name="min">10</param>  
      <param name="max">100</param>  
      <message>BAction-test校驗(yàn):數(shù)字必須為${min}為${max}之間!</message>  
    </field-validator>  
  </field>  
</validators> 

 

示例:第一個(gè)OGNL程序

public class OGNL1 
{ 
  public static void main(String[] args) 
  { 
    /* 創(chuàng)建一個(gè)Person對象 */ 
    Person person = new Person(); 
    person.setName("zhangsan"); 
     
    try 
    { 
      /* 從person對象中獲取name屬性的值 */ 
      Object value = Ognl.getValue("name", person); 
 
      System.out.println(value); 
    } 
    catch (OgnlException e) 
    { 
      e.printStackTrace(); 
    } 
  } 
} 
 
class Person 
{ 
  private String name; 
 
  public String getName() 
  { 
    return name; 
  } 
 
  public void setName(String name) 
  { 
    this.name = name; 
  } 
} 

控制臺(tái)輸出:

zhangsan

可以看到我們正確的取得了person對象的name屬性值,該getValue聲明如下:

public static <T> T getValue(String expression,Object root)throws OgnlException 
 
Convenience method that combines calls to parseExpression and getValue.  
 
Parameters: 
expression - the OGNL expression to be parsed 
root - the root object for the OGNL expression  
Returns: 
the result of evaluating the expression 

OGNL會(huì)根據(jù)表達(dá)式從根對象(root)中提取值。

相關(guān)文章

  • Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO

    Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO

    這篇文章主要介紹了Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 解決@CachePut設(shè)置的key值無法與@CacheValue的值匹配問題

    解決@CachePut設(shè)置的key值無法與@CacheValue的值匹配問題

    這篇文章主要介紹了解決@CachePut設(shè)置的key的值無法與@CacheValue的值匹配問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Springcloud服務(wù)注冊consul客戶端過程解析

    Springcloud服務(wù)注冊consul客戶端過程解析

    這篇文章主要介紹了Springcloud服務(wù)注冊consul客戶端過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java中int初始化可以為0,但不能為NULL問題

    java中int初始化可以為0,但不能為NULL問題

    這篇文章主要介紹了java中int初始化可以為0,但不能為NULL問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java并發(fā)中線程封閉知識(shí)點(diǎn)詳解

    Java并發(fā)中線程封閉知識(shí)點(diǎn)詳解

    在本篇文章里我們給大家整理了關(guān)于Java并發(fā)中線程封閉的知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們學(xué)習(xí)參考下。
    2019-07-07
  • mybatis連接數(shù)據(jù)庫實(shí)現(xiàn)雙表查詢

    mybatis連接數(shù)據(jù)庫實(shí)現(xiàn)雙表查詢

    本文主要介紹了mybatis連接數(shù)據(jù)庫實(shí)現(xiàn)雙表查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • SpringBoot+netty-socketio實(shí)現(xiàn)服務(wù)器端消息推送

    SpringBoot+netty-socketio實(shí)現(xiàn)服務(wù)器端消息推送

    這篇文章主要介紹了SpringBoot+netty-socketio實(shí)現(xiàn)服務(wù)器端消息推送,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • SpringBoot如何自動(dòng)生成API文檔詳解

    SpringBoot如何自動(dòng)生成API文檔詳解

    網(wǎng)絡(luò)程序正朝著移動(dòng)設(shè)備的方向發(fā)展,前后端分離、APP,最好的交互交互方式莫過于通過API接口實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于SpringBoot如何自動(dòng)生成API文檔的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 在Struts2中如何將父類屬性序列化為JSON格式的解決方法

    在Struts2中如何將父類屬性序列化為JSON格式的解決方法

    本篇文章,小編將為大家介紹關(guān)于在Struts2中如何將父類屬性序列化為JSON格式的解決方法,有需要的朋友可以參考一下
    2013-04-04
  • metershpere實(shí)現(xiàn)調(diào)用自定義jar包中的方法

    metershpere實(shí)現(xiàn)調(diào)用自定義jar包中的方法

    在MeterSphere接口測試中,面對多層循環(huán)邏輯和邏輯判斷等復(fù)雜情況,直接編寫測試用例往往顯得混亂不便,本文介紹了一個(gè)簡化這一過程的方法:首先使用IDEA創(chuàng)建Maven工程,編寫所需邏輯并生成jar包;然后在MeterSphere中上傳此jar包
    2024-10-10

最新評論

苗栗县| 琼海市| 汉源县| 阿克陶县| 巩留县| 广安市| 视频| 财经| 弥勒县| 越西县| 永川市| 察隅县| 宝鸡市| 黔江区| 武定县| 竹北市| 福泉市| 随州市| 安庆市| 丰台区| 自治县| 浦北县| 神农架林区| 象州县| 台山市| 东阳市| 石屏县| 沛县| 宕昌县| 毕节市| 徐汇区| 敦煌市| 永靖县| 二连浩特市| 综艺| 永福县| 蒙阴县| 梨树县| 开平市| 巴塘县| 高雄县|