Day43-Struts03

一、OGNL - 对象图导航语言

Object-Graph Navigation Language
其实就是给定一个对象,然后可以获取这个对象身上的属性值, 也可以给这个对象身上的属性赋值。 也可以调用这个对象方法…
struts底层就是用OGNL表达式来进行赋值的。

1. OGNL 核心元素

* 表达式:用于表示要执行什么操作
* 根元素:root,OGNL会在一定的范围里面查找对象,标注根对象的好处就是便于OGNL区分对象的位置,快速的定位它们的所在,而且OGNL在获取根对象和非根对象的表达式也不尽相同。
* 上下文:在OGNL范围里面,就是一个map集合,表示的就是一个范围,限定我们查询的范围。

2. OGNL 入门演示

1)导入Ognl的jar包
其实在struts基本jar包里面包含了Ognl的jar包;
核心jar包:ognl-3.0.19.jar;
依赖的jar包:javassist-3.11.0.GA.jar

2)Ognl的静态方法:
Ognl.setValue(表达式,根对象,值);
Ognl.getValue(表达式,根对象)

参数1:表达式,就是要操作什么东西,属性或者方法名
参数2:根对象:前面的这个name属性值就是从根对象取出来的。

Ognl可以操作属性,也可以操作方法!

     @Test
      public void test01() throws OgnlException{
           User user1 = new User("张三","123");
           User user2 = new User("李四","123");

           System.out.println(Ognl.getValue("username", user2));
           System.out.println(Ognl.getValue("getUsername()", user2));
           //这个代码虽然没有指定map集合,但是猜测。底下会有一个map上下文来包装我们的对象


           Ognl.setValue("username", user2, "王五");

           System.out.println(Ognl.getValue("getUsername()", user2));
           System.out.println(Ognl.getValue("getUsername()", user1));

      }
  • 表达式 和 根对象 和 上下文(OGNLContext )
    其实OGNL 里面表示上下文是有一个具体类来表示的。这个类是OGNLContext , 其实这个类也没有多少特别之处,就是一个Map 。
      @Test
      public void test02() throws OgnlException{
           User user1 = new User("张三","123");
           User user2 = new User("李四","123");

           Map<String, User> map = new HashMap<String, User>();
           map.put("user1", user1);
           map.put("user2", user2);

        /*
         * 参数一: 表达式
         * 参数二: 上下文 ,其实就是一个范围
         * 参数三: 根对象
         *
         * #取非根对象上的属性,就必须在前面加 #
         * OGNL默认找属性都是在根对象身上找的。如果不加#就表示要在根对象上找属性。
         */

           System.out.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值