小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

OGNL與值棧

 Architect_home 2019-03-25

一、OGNL概述

  1.1OGNL是對象圖導(dǎo)航語言(Object-Graph Navigation Languaged)的縮寫,他是一種功能強大的表達(dá)式語言,通過簡單一致的表達(dá)式語法,可以存取Java對象的任意屬性,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型的轉(zhuǎn)化功能。他使用相同的表達(dá)式去存取對象的屬性。如果吧表達(dá)式看作一個帶有語義的字符串,那么OGNL無疑成為了這個語義字符串與java對象之間溝通的橋梁。

  1.2OGNL的要素

    表達(dá)式:表達(dá)式是整個OGNL的核心,OGNL會根據(jù)表達(dá)式去對象中取值,所有的OGNL操作都是指對表達(dá)式解析后進(jìn)行的。它表明了此次OGNL操作要做什么。表達(dá)式就是一個帶有語法含義的字符串,這個字符串規(guī)定了操作的類型和操作的內(nèi)容。OGNL支持大量的表達(dá)式語法,不僅支持這種“鏈?zhǔn)健睂ο笤L問路徑,還支持在表達(dá)式中進(jìn)行簡單的計算。

    根對象(ROOT):Root對象可以理解為OGNL的操作對象,表達(dá)式規(guī)定了“做什么”,而Root對象則規(guī)定了“對誰操作"。OGNL稱為對象圖導(dǎo)航語言,所謂對象圖,就是以任意對象為根,通過OGNL可以訪問這個對象關(guān)聯(lián)的其他。

    Context對象:實際上OGNL的取值還需一個上下文環(huán)境,設(shè)置了Root對象,OGNL可以對root對象進(jìn)行取值或者寫值等操作,root對象所在環(huán)境就是OGNL的上下文環(huán)境(Context)。上下文環(huán)境規(guī)定了OGNL的操作”在哪里進(jìn)行“。上下文環(huán)境COntext是一個map類型的對象,在表達(dá)式中訪問Context中的對象,需要使用”#”號加上對象名稱,即“#對象名稱”的形式。

二值棧的概述

復(fù)制代碼
    在struts2里面提供本身一種存儲機(jī)制,類似于域?qū)ο螅侵禇?,可以存值和取?      在action里面把數(shù)據(jù)放到值棧里面,在頁面中獲取到值棧數(shù)據(jù)
    servlet和action區(qū)別
         Servlet:默認(rèn)在第一次訪問時候創(chuàng)建,創(chuàng)建一次,單實例對象
         Action:訪問時候創(chuàng)建,每次訪問action時候,都會創(chuàng)建action對象,創(chuàng)建多次
    值棧存儲位置
每次訪問action時候,都會創(chuàng)建action對象
在每個action對象里面都會有一個值棧對象(只有一個)
 
注:每個action對象總只有一個值棧對象

復(fù)制代碼

  2.1ValueStack是Struts的一個借口,字面意義為值棧,OgnlValueStack是ValueStack的一個實現(xiàn)類,客戶端發(fā)起一個請求struts2架構(gòu)會創(chuàng)建一個action'對象實例,同時也創(chuàng)建一個OgnlValueStack值棧實例,OgnlValueStack會貫穿真?zhèn)€Action的生命周期,struts2中使用OGNL將請求Action的參數(shù)封裝為對象存儲到值棧中,并通過OGNL表達(dá)式讀取值棧中的對象屬性值。

  2.2值棧的內(nèi)部結(jié)構(gòu)

在OgnlValueStack中包括兩部分:  

               第一部分 root,結(jié)構(gòu)是list集合一般操作都是root里面數(shù)據(jù)

 

           第二部分 context,結(jié)構(gòu)為map集合

 

注:可以在頁面中使用<s:debug/>這個標(biāo)簽產(chǎn)看值棧結(jié)構(gòu)和存儲值。

三、對值棧的存取操作   

 3.1獲取值棧對象

        1.通過ActionContext對象獲取值棧

ValueStack stack1 = ActionContext.getContext().getValueStack();

         2.通過request獲取值棧

ValueStack stack2 = (ValueStack) ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

  3.2對值棧的操作

      1.向值棧中放數(shù)據(jù):可以通過值棧的set,push方法或者在action中提供成員變量然后提供get方法即可。

       2.從值棧中取數(shù)據(jù):使用struts2的標(biāo)簽+ognl表達(dá)式獲取值棧數(shù)據(jù) <s:property value=”ognl表達(dá)式”/>

          獲取對象:

向值棧中放數(shù)據(jù)

在頁面中獲取

 

           獲取list集合:

第二種實現(xiàn)方式:

        獲取set方法向值棧中放入的數(shù)據(jù):

         獲取push方法向值棧中放入的數(shù)據(jù):

使用push方法設(shè)置值,沒有名稱,只有設(shè)置的值

向值棧放數(shù)據(jù),把向值棧放數(shù)據(jù)存到數(shù)組里面,數(shù)組名稱 top,根據(jù)數(shù)組獲取值

 

EL表達(dá)式獲取值棧數(shù)據(jù):

底層增強request對象里面的方法getAttribute方法

1)首先從request域獲取值,如果獲取到,直接返回

2)如果從request域獲取不到值,到值棧中把值獲取出來,把值放到域?qū)ο罄锩?/span>

四、 OGNL的#,%的使用

4.11.使用#獲取context里面的數(shù)據(jù)

4.12.演示向request域中放值,在頁面用ognl獲取

4.2%號的使用

  在struts2標(biāo)簽里面使用ognl表達(dá)式,如果直接在struts2表單標(biāo)簽里面使用ognl表達(dá)式不識別,只有%之后才會識別。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多