`
wanxiaotao12
  • 浏览: 472346 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2的ValueStack

 
阅读更多

Struts2 ValueStack & ActionContext & OGNL 关系小结

原生的OGNL三要素:

  1.expression 求值表达式——首先会被解析成对象树

  2.root object 根对象——默认的操作对象

  3.context OGNL执行环境——OGNL执行的上下文环境

  OGNL context是一个Map结构,ognl.OgnlContext类implements Map接口,root对象也在context里面,并且做这一个特殊的对象处理,具体表现为对root  对象的操作不需要加#指示符号(并且加上了#一定取不到root对象里面的值)。

 

在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等

 

Ognl从根中取属性, 如果没有则抛异常, 

从其他上下文中取属性, 如果没有, 不抛异常,返回为null

import org.junit.Test;

public class OgnlTest {

	@Test
	public void test1() {
		OgnlContext context = new OgnlContext();
		context.put("name", "zhangsan");
		context.put("age", 100);
		
		Person person = new Person();
		person.setName("wan");
		context.put("person", person);
		
		Person root = new Person();
		root.setName("root");
		

		try {
			//不带#号, 找root根的属性
			System.out.println(Ognl.getValue("name", context, root));
			//不带#号,找root根的属性,找不到, 则抛异常ognl.NoSuchPropertyException: com.ognl.Person.person1
//			System.out.println(Ognl.getValue("person1", context, root));
			
			System.out.println(Ognl.getValue("#name", context, root));
			System.out.println(Ognl.getValue("#person", context, root));
			//不存在的属性, =null
			System.out.println(Ognl.getValue("#person1", context, root));
			System.out.println(Ognl.getValue("#person.name", context, root));
			
			//从"hello world"的根里面找name属性, 找不到抛异常
			System.out.println(Ognl.getValue("name", context, "hello world"));
			
		} catch (OgnlException e) {
			e.printStackTrace();
		}

	}

}

 

分享到:
评论

相关推荐

    Struts2中关于ValueStack的一些操作

    2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...

    struts2jar包

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...

    马士兵Struts2笔记2013

    ValueStack是Struts2的核心组件之一,它是一个数据存储结构,用于管理Action上下文中的对象。Action中的属性会被放入ValueStack,从而可以直接在JSP中通过OGNL表达式访问。 8. **ValueStack Debug和Contents** ...

    struts1和struts2的区别

    - **Struts2**: 引入了ValueStack的概念,这使得开发者可以在视图层直接访问Action中的数据。Struts2还支持多种视图技术,如FreeMarker、Velocity等。 #### 数据绑定 - **Struts1**: 使用Commons-BeanUtils进行...

    Struts中的ognl和valueStack

    深入讲解Struts中的ognl和valueStack

    struts2学习笔记(完美总结)——转自OPEN经验库

    本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    Struts2——教程

    Struts2使用ValueStack来存储和传递数据,使得数据可以在Action和JSP之间无缝流动。 四、配置与注解 Struts2支持XML配置和注解配置两种方式。XML配置文件主要用于定义Action、结果类型、拦截器栈等,而注解则可以更...

    struts2入门例子

    5. **XWork2**:Struts2是在XWork框架的基础上发展起来的,XWork提供了Action管理和执行的核心机制,包括ActionContext、ValueStack等关键组件。 6. **运行流程**:当一个请求到达服务器,Struts2框架会解析`struts...

    基于Struts2的个人信息管理系统

    同时,Struts2的ValueStack和OGNL(Object-Graph Navigation Language)表达式语言使得数据绑定和视图渲染变得简单高效。 行程管理功能可能涉及对用户行程的创建、查看、修改和删除。Struts2支持多种数据源,如...

    struts2-blank

    在Struts2框架中,核心组件包括Action、Interceptor、Result、ValueStack等。Action是业务逻辑的执行者,Interceptor是拦截器,用于在Action执行前后进行额外的操作,如日志记录、权限检查等。Result则是Action执行...

    Struts1和Struts2的区别和对比

    页面绑定方面,Struts1依赖JSP标准机制,而Struts2采用ValueStack技术,允许taglib直接访问值栈中的对象,无需在视图和对象之间建立直接绑定,提高了重用性。 在类型转换上,Struts1的ActionForm属性通常是String...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    - **Struts2**则使用了ValueStack来存储Action对象和视图数据,这种机制允许在不同的页面之间传递数据,从而实现了更加灵活的页面导航。 #### 数据类型转换 - **Struts1**使用ActionForm中的方法来转换表单提交的...

    struts2测试案例

    6. **ValueStack**:ValueStack是Struts2中存储Action属性和请求参数的对象栈,使得在Action和JSP之间传递数据变得简单。 7. **Tiles框架集成**:Struts2可以与Tiles框架集成,方便地进行页面布局和组合。Tiles定义...

    struts1和struts2的区别(详细)

    此外,Struts2还提供了一个强大的ValueStack机制,用于在Action和视图之间传递数据。 #### 六、配置机制的不同 - **Struts1**: 使用XML配置文件进行配置,这种方式虽然直观但随着项目规模的增长可能会变得难以管理...

    struts2 学习资料

    这本书可能详细解释了Struts2的工作原理,如Action、Interceptor(拦截器)、Result和ValueStack等核心概念。它还会介绍如何创建和配置Struts2应用,以及如何处理表单提交、文件上传、国际化等常见任务。 "struts2...

    struts2解析文件

    - **ValueStack**: Struts2中的ValueStack是一个对象栈,用于存储ActionContext中的数据。它可以简化视图层的数据访问,只需通过OGNL表达式即可访问栈中的对象。 - **OGNL(Object-Graph Navigation Language)**: ...

    struts2API

    Struts2 API是Java开发中的一个关键工具,它为基于MVC(Model-View-Controller)设计模式的Web应用程序提供了一种强大的框架。Struts2是Apache软件基金会下的一个项目,它继承了Struts1的优点并引入了许多改进,旨在...

    struts1和struts2区别

    - **Struts2**:采用ValueStack技术,允许taglib直接访问视图,无需显式绑定,增强了重用性。 8. **类型转换**: - **Struts1**:依赖Commons-Beanutils进行类型转换,转换器不可配置且通常是针对String类型。 -...

Global site tag (gtag.js) - Google Analytics