Struts2_03

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chuan129/article/details/79602090

OGNL表达式:
概念:Object Graphic Navigation Language. 对象视图导航语言. struts2没有选择使用EL表达式作为整合表达式语言.而选择了功能更加强大OGNL表达式作为整合语言. 在Struts2环境中,更加推荐使用ognl表达式获得数据.

语法使用:
1.从Context部分取值: #号前缀
System.out.println(Ognl.getValue(“#user1.name”, oc.getValues(), oc.getRoot()));
System.out.println(Ognl.getValue(“#user1.age”, oc.getValues(), oc.getRoot()));

2.从Root部分取值: 不需要任何前缀
System.out.println(Ognl.getValue(“name”, oc.getValues(), oc.getRoot()));
System.out.println(Ognl.getValue(“age”, oc.getValues(), oc.getRoot()));

3. 调用方法
Ognl.getValue(“#user1.setName(‘jack’)”, oc.getValues(), oc.getRoot());
System.out.println(Ognl.getValue(“#user1.getName()”, oc.getValues(), oc.getRoot()));

4.调用方法(静态方法),访问静态属性
//访问静态方法
System.out.println(Ognl.getValue(“@cn.itcast.a_ognl.TestUtils@echo(‘hello ~ ‘)”, oc.getValues(), oc.getRoot()));
//访问静态属性
System.out.println(Ognl.getValue(“@java.lang.Math@PI”, oc.getValues(), oc.getRoot()));

5.为属性赋值
注意:赋值时,OGNL表达式支持自动类型转换. 8大基本数据类型以及对应包装类再加上Date类型.
System.out.println(Ognl.getValue(“#user1.name=’rose’ , #user1.name “, oc.getValues(), oc.getRoot()));
System.out.println(Ognl.getValue(“#user1.age=’16’ , #user1.age “, oc.getValues(), oc.getRoot()));

Struts2与OGNL的整合
struts2与OGNL整合,准备了一个OGNLValuesStack对象.该对象由两部分构成.

Context:部分.类型是一个Map. 实质上就是数据中心;
Root部分: 类型是一个栈;
这里写图片描述

struts2 为 OGNL 准备了数据
|- Context => 数据中心
|- Root => 栈

数据中心中放置
    |- request域 session域 application域
    |- 原生request对象,response对象,servletContext对象
    |- parameters参数集合...................

栈中放置了什么数据
    栈中放置了当前访问Action 

Ognl在Struts2中的应用

1> 页面中根据OGNL获得值
这里写图片描述
2> 参数赋值
这里写图片描述
3> 在struts.xml 中使用OGNL表达式
这里写图片描述
这里写图片描述
4>进阶: el 与 OGNL 的关系
这里写图片描述

猜你喜欢

转载自blog.csdn.net/chuan129/article/details/79602090