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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Struts2之Ognl

發(fā)布時間:2025/3/14 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2之Ognl 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇算是看著學習了下ValueStack、ActionContext,如果還沒明白他們之間是怎么回事,沒關系,可以先學下Ognl,然后再回頭看前面的可能就比較好理解了,我昨天也是一頭霧水,現(xiàn)在把Ognl的學習了下,慢慢的有了感覺。

一、概念

OGNL表達式是(Object-Graph?Navigation?Language)是對象圖形化導航語言。OGNL是一個開源的項目,struts2中默認使用OGNL表達式語言來顯示數(shù)據(jù)。與serlvet中的el表達式的作用是一樣的。OGNL表達式有下面以下特點:

1.支持對象方法調(diào)用,例如:objName.methodName();
2.支持類靜態(tài)的方法調(diào)用和值訪問,表達式的格式為
???? @[類全名(包括包路經(jīng))]
???? @[方法名?|??值名]
???? 例如:
???????? @java.lang.String@format('foo%s','bar')
?????????@tutorial.MyConstant@APP_NAME;
3支持賦值操作和表達式串聯(lián),例如:?
?????? price=100,?discount=0.8,?calculatePrice(),這個表達式會返回80;
?4.訪問OGNL上下文(OGNL?context)和ActionContext
?5.操作集合對象

二、實踐

這里定義了Address、User類

package com.cyw.test;public class Address {public Address(String city, String street) {super();this.city = city;this.street = street;}private String city;public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}private String street; } View Code package com.cyw.test;import java.util.Date;public class User {private String name;private int age;private Date birthDay;private Address address;public User(String name, int age, Date birthDay, Address address) {super();this.name = name;this.age = age;this.birthDay = birthDay;this.address = address;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public Date getBirthDay() {return birthDay;}public void setBirthDay(Date birthDay) {this.birthDay = birthDay;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}} View Code Address address=new Address("深圳市","坂田新天下");User user=new User("cyw",25,new Date(),address);//獲取javabean的屬性值String name=(String) Ognl.getValue("name", new HashMap(), user) ;System.out.println(name);//獲取對象的屬性值String city=(String) Ognl.getValue("address.city", new HashMap(), user) ;System.out.println(city);//修改屬性值name=(String) Ognl.getValue("name='cuiyw'", new HashMap(), user) ;System.out.println(name);Ognl.getValue("setName('cyw')", new HashMap(), user) ;//調(diào)用對象方法name=(String) Ognl.getValue("getName()", new HashMap(), user) ;System.out.println(name);//訪問靜態(tài)方法 格式:@包名+類名@靜態(tài)方法UUID randomUUID=(UUID)Ognl.getValue("@java.util.UUID@randomUUID()", new HashMap(), user) ;System.out.println(randomUUID.toString());//訪問靜態(tài)變量格式:@包名+類名@靜態(tài)變量名double pi=(double)Ognl.getValue("@java.lang.Math@PI", new HashMap(), user);System.out.println(pi);//操作索引數(shù)組元素int []array={1,2,3,4};int first= (int) Ognl.getValue("[0]", new HashMap(), array);System.out.println(first);//操作集合List<User> userList=new ArrayList<User>();userList.add(user);name = (String) Ognl.getValue("[0].name", new HashMap(), userList);System.out.println(name);//操作MapMap<String,String> map=new HashMap<String,String>();map.put("key1", "cui");map.put("key2", "yan");name = (String) Ognl.getValue("key1", new HashMap(), map);System.out.println(name);//創(chuàng)建listList<String> list=(List<String>)Ognl.getValue("{'cui','yan'}", new HashMap(), new Object());System.out.println(list.get(0));//創(chuàng)建mapmap=(Map)Ognl.getValue("#{'name':'cui','name2':'yan'}", new HashMap(), new Object());System.out.println(map.get("name"));

三、ActionContext、ValueStack

  • ?ValueStack是一個接口,在struts2中使用OGNL表達式實際上是使用實現(xiàn)了ValueStack接口的類OgnlValueStack,這個類是OgnlValueStack的基礎。
  • ValueStack貫穿整個action的生命周期。每一個action實例都擁有一個ValueStack對象。其中保存了當前action對象和其他相關對象。
  • ?Struts2把ValueStack對象保存中名為struts.valueStack的request域中。
  • ActionContext:

    OGNL中的上下文即struts2中的actionContext,OGNL中的root即struts2中的valueStack。

    充當OGNL的context,是action的上下文,也可以叫做action的數(shù)據(jù)中心,本質(zhì)是一個map,在其中,所有的數(shù)據(jù)都存放在這里,那其中到底存放了哪些東西呢,actionContext中存放數(shù)據(jù)的方式又是怎樣的?

    actionContext是一個map,所以其中都是以鍵值對的形式存儲對象,如下圖所示,

    request、session、application這種我們熟知的作用域,注意是作用域,而不是對象,

    paramters:這個是表單提交的參數(shù),全部都會放到這個map中,

    attr(attributes):三個作用域所有的屬性都會放在該map下,如果有重復的,那么以request域中的為準。

    VALUE_STACK:值棧,存放著valueStack對象,也就是說,通過ActionContext能夠獲取到valueStack。

    如果我們使用actionContext.put();? 那么會將該鍵值對直接放入到ActionContext下

    ValueStack:值棧,本質(zhì)是一個ArrayList,作用,充當ognl的root,給一次請求中共享數(shù)據(jù)的功能。

    root:源碼中的名稱為CompoundRoot,它也是一個棧,而每次值棧中入棧和出棧等操作其實就是對CompoundRoot進行對應的操作。

    Context:對actionContext的引用,也就是通過valueStack也能夠獲取到上下文,通過getContext();

    在我們訪問一個action時,會將action加入到棧頂,也就是action會在CompoundRoot的棧頂,而我們提交的各種表單參數(shù)(充當了ognl表達式)會在valueStack從頂向下查找對應的屬性進行賦值。這就是值棧的作用。

    參考:http://blog.csdn.net/v123411739/article/details/24052989

    轉(zhuǎn)載于:https://www.cnblogs.com/5ishare/p/6636769.html

    總結

    以上是生活随笔為你收集整理的Struts2之Ognl的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 在线观看免费视频a | 国产资源av| 欧美高清不卡 | 日本一区二区视频免费 | 韩国av毛片| 精品久久亚洲 | 久久国产精品一区二区三区 | 亚洲精品国产片 | 亚洲天堂视频网站 | 中国美女毛片 | 日韩午夜电影网 | 呦呦视频在线观看 | 日日日操操操 | 国产在线激情视频 | 播放一级黄色片 | www久久久久久| 看免费黄色大片 | 中文字幕超清在线观看 | www.亚洲欧美| 国产69精品久久久久久久 | 国产成人观看 | 五月天激情影院 | 亚洲午夜一区二区 | 久久成人福利视频 | 国产精品主播在线 | 亚洲视频h | 成人爱爱| 久久久激情 | 污视频软件在线观看 | 怡红院成人网 | 毛片一级视频 | 一区久久久 | 亚洲一区二区三区在线免费观看 | 国产精品国产精品国产专区不卡 | 91插插影库 | 欧美日韩网址 | jizz国产在线 | 69xav| 91丨九色丨蝌蚪丨对白 | 日韩在线免费视频 | 亚洲天堂免费在线观看视频 | 九九人人| 麻豆av片 | 熟女高潮一区二区三区视频 | 日韩人妻无码精品久久免费 | 亚洲一级无毛 | 日韩精品无码一区二区三区 | av动漫网站| 久久久久久国产精品视频 | 国产一二在线 | 岛国色图 | 国产一区二区三区播放 | 清草视频 | 亚洲综合色在线 | 亚洲干干干 | 99久热 | 久操热 | 亚洲av色区一区二区三区 | 青青视频在线播放 | 久久婷婷成人综合色 | 韩国一区二区三区视频 | 国产成人精品亚洲线观看 | 欧美日本另类 | 国产成人精品一区二区三区在线观看 | ass精品国模裸体pics | 夜夜艹天天干 | 亚洲男女在线 | 性一交一黄一片 | 亚洲乱妇老熟女爽到高潮的片 | 狠狠干天天色 | 国产视频成人 | 久久资源av | 性xxx18| 性爱视频在线免费 | 午夜免费福利影院 | 美女黄视频网站 | 亚洲一级网 | 亚洲特黄毛片 | 影音先锋制服丝袜 | 国模小丫大尺度啪啪人体 | 欧美一区二区三区免费 | 欧美日韩成人一区二区 | 色老头在线一区二区三区 | 日韩欧美中文字幕一区 | 边添小泬边狠狠躁视频 | xxx69美国 | 影音先锋中文在线 | 夜夜久久久 | 国产日韩欧美高清 | 在线观看免费观看 | 国产啪视频 | 中文字幕在线视频免费播放 | 亚洲伦理精品 | 日日操日日干 | 亚洲视频综合网 | 久久久久亚洲av无码网站 | 国产99色 | 久久性av | www视频在线观看 |