SSH框架之Struts2 下

OGNL表达式:

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.调用方法(静态方法),访问静态属性

4.1 访问静态方法
System.out.println(Ognl.getValue("@cn.itcast.a_ognl.TestUtils@echo('hello ~ ')", oc.getValues(), oc.getRoot()));

4.2 访问静态属性
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部分: 类型是一个栈;
SSH框架之Struts2 下_第1张图片

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

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

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

Ognl在Struts2中的应用

1> 页面中根据OGNL获得值
SSH框架之Struts2 下_第2张图片
2> 参数赋值
SSH框架之Struts2 下_第3张图片
3> 在struts.xml 中使用OGNL表达式
SSH框架之Struts2 下_第4张图片
SSH框架之Struts2 下_第5张图片
4>进阶: el 与 OGNL 的关系
SSH框架之Struts2 下_第6张图片

你可能感兴趣的:(javaEE)