Struts2 OGNL valueStack琐碎总结
总结一:
ActionContext是Action的资源环境,每一次Action请求都会创建一个新的ActionContext,并且每一个ActionContext都是不同的(一次Action请求完毕,对应的ActionContext即销毁。但是,如果请求是在两个action之间转发而不是重定向,则任然用的是同一个ActionContext对象)。
ActionContext中包含:request,session,application,parameter,valueStack等元素。
总结二:
OGNL(Object Graph Navigation Language对象图导航语言):在struts2主要用在JSP页面中结合struts2自定义标签库访问OGNL Context中的数据,而在struts2中,OGNL的context即为ActionContext,其中ActionContext中的valueStack是OGNL context的根对象。OGNL context结构示意图如下:
总结三:
ValueStack中的数据:每一次Action请求后,action的拦截器(比如ModelDriven interceptor 、 Parameter Interceptor等)都会根据用户传递的参数在ValueStack的栈顶存放一定的数据。一般情况下,valueStack栈顶存放的是当前Action对象本身,这样就可以在jsp页面中直接访问该Action对象的成员属性了(如user.name)。另外,如果此Action实现了ModelDriven接口,则放置于栈顶的将不再是Action对象本身了,而是此Action中设定的成员变量:model对象(getModel方法中返回的model对象)。然后,在此model对象下面才是action对象。
ValueStack中(栈顶)的数据一个很重要的作用就是用作struts2自定标签的回显功能,因为struts2的自定义标签可以自动获取valueStack中具有相同name属性的数据,并显示在JSP页面上,主要用在form表单中的textField,textArea,select,checkboxlist,radio等form标签的回显(jsp的标签库是没有这一回显功能的)。所以,有时候Action的作用就是 往值栈valueStack中准备一定的数据,供跳转后的页面回显(如:在编辑用户资料的时候,需要在页面上回显该用户原有的数据)。
总结四:
几种特殊字符在OGNL表达式中的应用:
1、# :
①. #request.user<=>#user ,等价,可以省略request限定。其他情况(如session,application,parameters等),都不能省略范围限定;
②. 构造Map并放置于valueStack栈顶,如#{'foo1':'bar1', 'foo2':'bar2'};
③.用作投影(不常用);
2、%{user}:只能用在struts2的自定义标签库的属性中,不能用在其他的地方。在struts2的自定义标签库的属性(如:value属性)中,有些是接受String,有些是接受Object类型,为了能让改属性(如:value属性)的值能通过OGNL获得,就必须用%{},如 :
JSP 页面:
<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}"/>
不使用%:<s:url value="#foobar['foo1']"/>
使用%:<s:url value="%{#foobar['foo1']}"/>
结果显示:
不使用%:#foobar['foo1']
使用%:bar1
|
3、$ {}:
①. 用于在国际化资源文件中,引用OGNL表达式;
②. 在Struts 2配置文件中,引用OGNL表达式,如
<action name="AddPhoto" class="addPhoto">
<result type="redirect">
ListPhotos.action?albumId=${albumId}
</result>
</action>
|
分享到:
相关推荐
其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达语言,用于在视图层与模型层之间传递数据。在深入理解OGNL的源码之前,我们首先需要了解OGNL的基本概念和用法。 OGNL是一种强大的表达式语言...
### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...
总结,Struts2 OGNL是框架中不可或缺的部分,提供了强大的数据绑定和表达式执行能力。然而,它的灵活性也带来了安全风险,因此开发者需要了解其工作原理并采取适当的安全措施。通过深入学习和实践,我们可以更好地...
深入讲解Struts中的ognl和valueStack
在这个“Struts2 OGNL用法项目”中,我们将深入探讨OGNL(Object-Graph Navigation Language),它是Struts2中一个强大的表达式语言,用于在模型对象和视图之间进行数据绑定和表达式计算。 OGNL是Struts2的核心组件...
- `ValueStack`是Struts2的核心组件,它存储了Action上下文中的所有对象,OGNL通过这个栈来查找和操作对象。 2. **值查找与设置**: - OGNL使用`ValueAccessor`接口来访问对象的属性。不同的类型(如POJO、Map等...
Struts2 OGNL 表达式总结 OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许...
OGNL(Object-Graph Navigation Language)是Struts2框架中的一个重要组件,用于在Web应用中访问和操作Java对象的属性,调用其方法,以及执行类型转换等操作。 OGNL是对象图导航语言的缩写,它是一种功能强大的...
5. **OGNL与Struts2的集成**:Struts2是如何将OGNL与Action、ValueStack和结果视图模板结合的。 6. **OGNL的异常处理**:遇到错误时,如何理解和解决OGNL表达式抛出的异常。 7. **最佳实践**:如何优化OGNL的使用...
Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...
这个压缩包包含的是OGNL的2版本的源代码,这对于理解Struts2框架的工作原理以及OGNL语言的实现细节非常有帮助。 OGNL的主要功能是提供一种简洁的方式来获取和设置对象的属性,甚至可以处理复杂的对象图。例如,你...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
Struts2 OGNL---标签详解析 都有实例 适合初学者
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。这篇博客将深入探讨OGNL在Struts2中的应用,并通过案例"TextOgnl"来展示其工作原理。 一、OGNL的基本...
关于struts2 OGNL 详细教程,对初学者有帮助
Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...
struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...
这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,帮助开发者更好地理解和应用这一强大的特性。 首先,让我们了解什么是OGNL。OGNL是一种强大的表达式语言,允许我们访问和修改对象图中的...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表示层的数据交换。这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心...
struts2 ognl源文件 在ECLIPSE导入后可方面的利于开发