亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Struts2_ValueStack,OGNL詳解(轉)

2019-11-14 15:03:25
字體:
來源:轉載
供稿:網友

原文地址:http://blog.csdn.net/wyply115/article/details/8257140

一、OGNL表達式

1.ognl是struts2中使用的一種表達式語言,可用于jsp的標簽庫中,以方便訪問各種對象的屬性。它用于把界面的參數傳遞到Action中(并進行類型轉換),它還可以用于struts2的配置文件中。

2. Root對象。

  OGNL稱為對象圖導航語言,所謂對象圖,即以任意一個對象為根,通過OGNL可以訪問與這個對象關聯的其它對象,例如:

public class User{      PRivate String username;      private Group group;      //省略setter,getter方法  }  public class Group{      private String name;      private Organization org;      //省略setter,getter方法  }  public class Organization{      private String orgId;      //省略setter,getter方法  }  

以上三個類,描述了通過User對象可以導航到Group對象,進而導航到Organization對象。以User為根,通過基本的getters方法,可以訪問到此根對象的其它關聯對象.【對象圖的導航,必須通過getters方法導航】。

注意:    

  * 導航的目的,就是為了獲取某個對象的值或設置某個對象的值或調用某個對象的方法.

  * OGNL表達式語言的真正目的,是為了在那些不能寫java代碼的地方執行java代碼,或者是為了更方便的執行java代碼.

3.Context對象

* 在OGNL表達式中,有可能需要訪問到多個毫不相干的對象,這時候,我們需要給OGNL傳遞一個Map類型的對象,把表達式中需要用到的對象放到Map中即可.而這個Map對象稱為Context。

 

  * 要在表達式訪問到context中的對象,需要使用"#對象名稱"的語法規則

 

  * 存在context的主要原因就是在OGNL中,不支持多個root對象,而如果需要在表達式中訪問多個毫不相關的對象時,只能通過一個Map來把這些對象統一傳遞給OGNL。 

二、ValueStack

  1.ValueStack是一個接口,在struts2中使用OGNL(Object-Graph Navigation Language)表達式實際上是使用實現了ValueStack接口的類OgnlValueStack.它ValueStack的默認實現類.

  2.ValueStack貫穿整個action的生命周期,每一個action實例都擁有一個ValueStack對象,其中保存了當前action對象和其他相關對象.

  3.struts2把ValueStack對象保存在名為:struts.valueStack的request域中.即ValueStack作用域為request.當action創建的時候,ValueStack就創建了,action被銷毀的時候,ValueStack就銷毀了

  4.ValueStack中的數據分兩部分存放:root(棧結構,CompoundRoot)和context(map形式,OgnlContext) 

(1)

* 其中的root對象是CompoundRoot,CompoundRoot繼承了ArrayList,提供了額外的方法:push(),和pop()方法,用來對root對象中所包含的數據進行存取.正是由于這兩個方法,CompoundRoot變成了一個棧結構.

* struts2中,一個請求在最終到達Action的方法之前,Action對象本身會被壓入ValueStack(實際上就是放到ValueStack 的CompoundRoot中),所以action對象是CompoundRoot中的一個元素.

(2)

* 其中的context對象是OgnlContext,它實現了map接口,在valuestack的默認實現類中,即OgnlValueStack類中,調用ongl中的方法:Ognl.createDefaultContext(..)給context賦值,查看源代碼可知,此方法返回的是一個OgnlContext對象.

  5.獲取ValueStack的三種方式

(1)ValueStack valueStack = ActionContext.getContext().getValueStack(); 

    ActionContext為Action的上下文,其中有重要的6大對象valueStack,parameters,request,session,application,attr。而ognl表達式必須選擇AcitonContext中的一個對象作為根對象(root),默認為valueStack,因此訪問valueStack中的數據不加#,而如果要使用另外5個對象作為根對象,需要加#前綴。

 ?。?)ValueStack valueStack = ServletActionContext.getValueStack(ServletActionContext.getRequest());

  ServletActionContext繼承了ActionContext,它與web容器耦合,可以獲取web容器的一些信息.

  (3)ValueStack valueStack = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");

  因為ValueStack被置于Request域中。

  6.ValueStack內存結構圖

  原博文圖涉及底層實現細節,該圖是我簡化后,原博文圖片(http://img.my.csdn.net/uploads/201212/04/1354620065_9013.png)

  7.常用的存儲數據的方法

  (1)向Map棧中存數據,即ValueStack中的context中存儲數據。

    通過request, session等向map中存儲數據:

  ServletActionContext.getRuquest().setAttribute("username","xxx") ;

  ServletActionContext.getSession().put("pwd","123");

   直接向Map棧中存放數據:

  ActionContext.getContext().put("msg","hello") ;

  (2)向對象棧中存數據,即ValueStack中的root(CompoundRoot)對象

  * 先得到root,再把數據壓入到root中,這中方式是放入到棧底

ValueStack valueStack =ActionContext.getContext().getValueStack(); valueStack.getRoot().add(new Person());


* 先得到root,利用add(index,Object)把一個對象壓入到root中指定位置.

ValueStack valueStack =ActionContext.getContext().getValueStack(); valueStack.getRoot().add(0,new Person());//這里0,表示壓入棧頂.

* 存放一個map到對象棧中

ValueStack valueStack =ActionContext.getContext().getValueStack(); valueStack.set("msg","dude"); //先封裝成Map,在把Map放入到對象棧中,且放入棧頂.

* 利用valueStack的push方法把一個對象直接壓入棧頂

ValueStack valueStack =ActionContext.getContext().getValueStack();valueStack.push(new Person());

8.利用OGNL表達式取ValueStack中的數據

(1)<s:property />:取棧頂的元素.
(2)<s:iterator />:取棧頂的元素.
注意:此標簽的value屬性值無論來自對象棧還是Map棧,都可以不加#前綴(<s:select/>標簽也適用).
因為此標簽在迭代的時候,總是把當前正在迭代的元素放入到棧頂.

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成年人在线观看| 51久久精品夜色国产麻豆| 亚洲人成网站色ww在线| 日本免费久久高清视频| 亚洲黄色免费三级| 国产精品网红福利| 狠狠躁夜夜躁久久躁别揉| 成人亚洲欧美一区二区三区| 久久综合免费视频| 亚洲男人天堂网站| 亚洲免费高清视频| 欧美在线视频在线播放完整版免费观看| 国产精品高潮在线| 久久免费视频在线| 一本大道久久加勒比香蕉| 亚洲剧情一区二区| 久久久久国产精品免费网站| 91精品久久久久久久久青青| 日韩精品中文字幕在线| 亚洲男人的天堂在线| 91亚洲精品视频| 国产一区二区三区高清在线观看| 久久99精品久久久久久青青91| 久久精品久久精品亚洲人| 97香蕉久久夜色精品国产| 97精品视频在线| 日本久久久久亚洲中字幕| 国产成人aa精品一区在线播放| 欧美精品福利在线| 亚洲精品色婷婷福利天堂| 欧美激情视频给我| 成人国产亚洲精品a区天堂华泰| 国产精品国产三级国产aⅴ9色| 国产精品美女网站| 国产一区二区三区在线免费观看| 欧美激情免费看| 久热99视频在线观看| 欧美体内谢she精2性欧美| 欧美性猛交xxxx乱大交极品| 高跟丝袜一区二区三区| 日韩av在线免播放器| 中文字幕欧美视频在线| 538国产精品一区二区在线| 精品福利在线观看| 9.1国产丝袜在线观看| 国产综合在线观看视频| 亚洲在线视频观看| 国产狼人综合免费视频| 91精品国产色综合久久不卡98口| 国产精品日韩在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 日韩中文字幕免费看| 欧美中文在线免费| 亚洲女成人图区| 欧美高清激情视频| 欧美激情影音先锋| 欧美午夜激情在线| 懂色av一区二区三区| 国产精品第三页| 亚洲网址你懂得| 国产精品视频导航| 成人午夜激情网| 国产欧美亚洲精品| 亚洲天堂av在线播放| 成人精品视频久久久久| 一区二区在线视频| 成人在线国产精品| 欧美亚洲国产日韩2020| 国产精品久久久久77777| 欧美亚洲成人免费| 青青青国产精品一区二区| 亚洲国产小视频在线观看| 亚洲国产日韩欧美在线99| 国产一区二区黄| 久久这里只有精品视频首页| 最近2019年日本中文免费字幕| 日韩中文字幕免费视频| 91久久久国产精品| 日韩高清av一区二区三区| 精品成人乱色一区二区| 97超碰国产精品女人人人爽| 国产精品第一页在线| 亚洲va欧美va在线观看| 日韩免费在线观看视频| 欧美午夜久久久| 亚洲欧美三级在线| 国产精品三级美女白浆呻吟| 国产精品一区二区三区久久| 国产精品久久久久久久久久免费| 亚洲综合色激情五月| 欧美电影第一页| 久久91超碰青草是什么| 国产日韩换脸av一区在线观看| 欧美另类高清videos| 成人a视频在线观看| 久久久爽爽爽美女图片| 精品视频在线导航| 欧美成人在线免费视频| 69精品小视频| 亚洲国产成人精品一区二区| 91国产在线精品| 136fldh精品导航福利| 欧洲成人免费视频| 在线中文字幕日韩| 中文字幕精品久久久久| 成人在线激情视频| 欧美伦理91i| 欧美成人剧情片在线观看| 久久精品一偷一偷国产| 九九久久综合网站| 久久久在线视频| 91久久久久久| 国产精品久久久久久久久久三级| 亚洲精品美女视频| 欧美电影在线观看高清| 亲爱的老师9免费观看全集电视剧| 久久久国产精品免费| 国产欧美va欧美va香蕉在| 91精品国产精品| 亚洲国产精品久久久久秋霞蜜臀| 成人激情视频免费在线| 国产精品成人一区二区三区吃奶| 国产噜噜噜噜噜久久久久久久久| 成人免费午夜电影| 久久久精品欧美| 亚洲精品视频在线播放| 久久久中精品2020中文| 国产91精品久久久久久久| 国产成人综合一区二区三区| 国产成人精品日本亚洲专区61| 66m—66摸成人免费视频| 国产精品视频1区| 欧美激情啊啊啊| 亚洲free性xxxx护士hd| 国产69精品久久久久久| 日韩精品视频在线免费观看| 亚洲欧美日韩国产成人| 欧美黑人性猛交| 欧美性猛交xxxx富婆| 欧美在线影院在线视频| 高潮白浆女日韩av免费看| 久久久综合免费视频| 久久精品国产清自在天天线| 亚洲欧美日韩在线高清直播| 久久免费国产视频| 中文字幕欧美精品在线| 中文字幕日韩欧美在线视频| 亚洲成人免费在线视频| 国产精品人人做人人爽| 一本色道久久88综合日韩精品| 亚洲图片欧美日产| 日韩美女视频中文字幕| 91高清视频免费| 国产精品视频在线播放| 欧美日韩福利电影| 欧美精品久久一区二区| 成人国产精品日本在线| 久久久久久久久久久亚洲| 亚洲欧美中文另类| 欧美高清videos高潮hd| 国产专区欧美专区| 欧美高清在线观看| 欧美老女人性视频| 狠狠操狠狠色综合网|