第一:值栈
1.struts2的s:debug将会产生值栈(valueStack)和值栈上下文(stackContext),其中值栈是根对象,值栈上下文是非跟对象。
2.值栈里面包含的内容有:对象、对象属性、对象的属性值。
(1).在提交表单的时候,会进入action层去执行相应的方法,也就是说一定会产生一个对象
(2).产生这个action对象之后,也会产生他的所有属性
(3).而属性值就是我们提交表单的时候提交到action层的值(属性和属性值是一对键值对)。
注意:看值栈的时候可以看图
3.在页面提交之前,action 对象还没进入值栈当中(由于没进入值栈中,那么肯定也没进入值栈上下文当中)。
4.在我们点击提交按钮之后,struts2会根据from表单的请求路径xxx.action去执行action层中的类(执行过程就是先创建该类的对象,然后给属性赋值,然后进入具体的业务方法)。而在struts2创建action层对象的时候,首先将action对象放入值栈中,然后在将其放入值栈上下文中,在值栈上下文的固定名称是“action”。
5.在jsp页面当中,struts2将EL表达式扩展到了值栈中,可以利用EL表达式直接输出值栈对象的属性(其实用的就是值栈中对象的属性(是个键值对),在debug中可以看到
第二:ognl表达式
user.username中的user是类中对象,username是对象的属性,.表示在导航
(1)ognl是Object Graph Navigation Language的首字母缩写,
翻译成中文是对象图导航语言的意思;
因此ognl表达式就是:基于对象图导航语言的一种表达式,
对象图导航的含义就是通过对象的链式结构表示对象的属性;
(2)什么是对象的链式结构?(el表达式的复习)
使用点号或者中括号表示对象的属性,此一点与el表达式类似,分为两种情况:
①对象的属性是普通对象:
例1,访问person对象的name属性:
person.name
person["name"]
例2,访问employee对象的company属性,
其中company属性引用的company对象含有name属性:
employee.company.name
②对象的属性是集合对象:
例1,team对象的persons属性是list类型的集合,
其中集合中的元素是person对象:
team.persons[2].name
例2,team对象的persons属性是map类型的集合,
其中集合中的元素是entry项(键值对):
team.persons["p1001"].name
或者:
team.persons.p1001.name
(3)ognl表达式的特殊性
支持ognl表达式的底层数据结构,是一个特殊的map结构,
在这个map结构中有两种类型的绑定:根对象和非根对象。
它们访问各自属性的方式是不同的:
①根对象不必通过自身引用,而直接访问自己的属性;
如果根对象中具有相同的属性,则接近栈顶的对象首先得到访问。
参考图:《值栈中对象属性的访问.jpg》
②非根对象必须通过自身的引用,才能访问自己的属性。
(4)在Struts2框架中,ActionContext对象为ognl表达式提供了一个特殊的map结构,
在这个map结构中含有一些固定的绑定,其中值栈是一个具有特权的绑定,
因为规定值栈中的对象全都是根对象,而其它的绑定都是非根对象。
-application
|
-session
|
-request
包含 |
ActionContext--->Map----com.opensymphony.xwork2.util.ValueStack.ValueStack
|
-action
|
-attr
|
-parameters
|………………
(5)ActionContext与StackContext的区别:
①ActionContext是Struts2框架的内置对象,
负责维护ognl表达式的数据结构;
②StackContext并不是Struts2框架中的一个内置对象,
而是指值栈的上下文环境,这个值栈的上下文环境就是
ActionContext对象中所包含的map结构。
2.为什么要使用ognl表达式?
(1)ognl表达式为视图组件的数据处理提供了强大的运算功能
(2)在配置文件(xml和properties)中,利用ognl表达式可以访问对象或对象属性;
三、ognl表达式使用案例:
(1)Action中的属性是JavaBean对象
通过ognl表达式,使表单项的名称与Action中bean对象的属性名称匹配,
例如:Action中包含User类型的对象user,它的一个属性是username,
那么表单项中的name应该是user.username
(2)页面中使用ognl表达式:
①值栈中的对象:
(a)${user.username}
el表达式扩展到值栈中
(b)<s:property value="user.username"/>
value属性值是ognl表达式,即输出值栈中对象的属性(值栈中的对象是根对象,所以前面不用加东西)
②Action上下文(值栈上下文)中的对象
<s:property value="#action.user.username" />
此时不能使用${} (值栈上下文中的对象前面要加上值栈对象。此时action表示值栈上下文中的一个键(键名为action),#action表示值栈上下文对象映射的action对象)
相关推荐
2. **上下文(Context)**:OGNL表达式执行时,会有一个上下文,包含当前环境中的变量和对象。在Struts2中,这个上下文包含了Action对象和其他请求相关的对象。 3. **方法调用**:OGNL不仅支持属性访问,还能调用...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
OGNL表达式可以在一个上下文中执行,这个上下文包含了变量和对象。在Struts2中,Action上下文就是OGNL的默认上下文,其中包含了Action实例和其他请求相关的对象。 三、OGNL与Struts2的结合 1. 表单绑定:Struts2...
OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。... 4、访问OGNL上下文(OGNL context)和ActionContext; 5、操作集合对象。
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Apache Struts2框架中的核心组件,也被其他许多Java应用程序广泛使用。本篇文章将深入探讨OGNL的原理、功能...
OGNL,全称为Object-Graph Navigation Language,是一种强大的开源表达式语言,主要用于便捷地操作对象的属性和方法。在Struts2框架中,OGNL作为默认的表达式语言发挥着核心作用,允许开发者以简洁的方式访问和修改...
**OGNL**,即**Object Graphic Navigation Language**(对象图导航语言),是Struts2框架中用于处理对象及其属性的强大工具之一。通过OGNL,开发者能够在JSP页面上灵活地操作JavaBean对象及其属性。 1. **OGNL...
OGNL(Object-Graph Navigation Language,对象图导航语言)是Struts 2框架的默认表达式语言,它极大地增强了Struts 2的数据访问能力和代码简洁性。OGNL不仅能够通过简单的表达式访问Java对象的属性,而且还可以用于...
2. **上下文(Context)**:OGNL表达式解析时会查找一个上下文,通常是一个Map,其中包含了变量和对象。 3. **值栈(Value Stack)**:在Struts2中,OGNL与值栈紧密配合,值栈是一个对象栈,用于存储Action对象和...
ognl(Object-Graph Navigation Language)是一种强大的表达式语言,用于在Java对象图中导航、查找和修改值。它广泛应用于Spring MVC框架和其他Java应用中,作为数据绑定和表达式语言的核心。在本文中,我们将深入...
OGNL是一种灵活的、强大的表达式语言,设计用于导航和操作对象图。它的名字来源于其功能,即可以沿着对象图进行导航并执行操作。在Struts2框架中,OGNL作为默认的数据绑定和表达式语言,用于在Action类的属性与视图...
2. **上下文(Context)**:OGNL表达式运行时,会有一个上下文对象,其中包含了变量和对象的映射。在Struts2中,这个上下文通常包含Action实例、值栈等。 3. **操作符**:OGNL支持多种操作符,如索引操作(`[]`)、...
3. **上下文环境(Context)**:OGNL表达式运行时的环境,通常是一个Map结构,用于存储额外的信息,比如请求参数等。上下文中可以定义额外的变量或者方法供OGNL表达式使用。 #### 三、OGNL表达式的常见用法 1. **...
**OGNL(Object-Graph Navigation Language)**是一种强大的表达式语言,主要被广泛应用于Java领域,用于获取和设置对象的属性。它允许开发者通过简洁的语法来导航对象图,执行复杂的逻辑运算,以及调用方法。这篇...
第四章:Struts2中的OGNL.ppt详细探讨了Struts2框架中使用OGNL(Object-Graph Navigation Language,对象图导航语言)的关键概念和技术。OGNL作为一种强大的表达式语言,使得开发者能够方便地访问Action携带的数据,...
2. **上下文(Context)**:OGNL表达式解析时会使用一个上下文对象,其中包含变量和值,类似于JavaScript的全局变量。这允许开发者在表达式中引用动态绑定的变量。 3. **类型安全**:OGNL支持自动类型转换,能够...
OGNL,全称为对象图导航语言,是一种强大的表达式语言,广泛应用于Java世界,特别是在Struts2框架中作为默认的表示层表达式语言。它允许开发者以简洁的方式访问和操作对象的属性,包括动态方法调用和复杂的表达式。...
OGNL (Object Graph Navigation Language) 是一种强大的表达式语言,被广泛应用于Struts2框架中,用于在Action对象和视图之间传递数据。它允许开发者直接通过字符串表达式来访问和操作Java对象的属性,包括静态方法...
ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...
4. **上下文(Context)与值栈(Value Stack)**:ognl在执行表达式时,会使用一个上下文对象来保存变量和参数,以及一个值栈来管理多个表达式间的共享数据。理解这两个概念对于调试和优化ognl表达式很有帮助。 5. ...