`
Asen丶
  • 浏览: 39963 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Ognl值栈对象及struts标签

阅读更多

用户每次访问struts的action,都会创建一个Action对象、值栈对象、ActionContext对象;然后把Action对象放入值栈中; 最后再把值栈对象放入request中,传入jsp页面(key: struts.valueStack)。

 

值栈的内存结构分为:

     map栈:

           request

           session

           application

     list栈:

           action及全局对象

 

我们只需要通过ActionContext对象就可以访问struts的其他的关键对象。

public class OgnlDemo2 extends ActionSupport {
	
	private User user = new User(100,"Jacks");
	
        public User getUser() {
		return user;
	}
        public void setUser(User user) {
		this.user = user;
	}

	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		ActionContext ac = ActionContext.getContext();
		
		ac.put("test", new User(222, "Ronaldo"));
		
		ValueStack vs = ac.getValueStack();
		
		vs.push(new User(111, "Asen"));

		return SUCCESS;
	}
}

 struts会将全局属性及action对象放入根元素中即list栈,如图:



 

以下方法可以操作该栈对象

vs.push(new User(101, "Asen"));//可以list栈顶添加对象

 

vs.pop();//可以移除list栈顶对象

 

vs.set("new_user", new User(222, "Ronaldo"));//也可以往list栈添加元素



 

ac.getContextMap().put("user1", new User(111, "mapUser"));

ac.getSession().put("user2", new User(444, "sessionUser"));

ac.getApplication().put("user3", new User(5555, "applicationUser"));

 

可以向map栈(OgnlContext)添加对象



从这个table里可以找到:

user1=com.asen.test4.entity.User@7dbeb971

session={user2=com.asen.test4.entity.User@59713249}

application={user3=com.asen.test4.entity.User@9482b33

 

综上所述:

ActionContext.getContext().put(String key, Object value)放入map栈(OgnlContext)

 

ActioinContext.getContext().getValueStack().push(Object value)放入list栈

 

在jsp页面我们可以通过struts标签获取值栈里的对象

对于map栈的数据,加#号访问

<s:iterator value="#test">
	<tr>
		<td><s:property value="id" /></td>
		<td><s:property value="name" /></td>
	</tr>
</s:iterator>

 

ognl表达式对于list栈的数据直接根据key值提取value值就可以了

<s:property value="id" />

 

还可以用

<td><s:textarea name="id" /></td>

<h2>ValueStack vs = ac.getValueStack();</h2>
<h2>vs.push(new User(111, "Asen"));</h2>
<tr>
	<td><s:property value="id" /></td>
	<td><s:property value="name" /></td>
</tr>
<tr>
	<td><s:textfield name="id" /></td>
	<td><s:textfield name="name" /></td>
</tr>

<h2>private User user = new User(100,"Jacks");</h2>
<tr>
	<td><s:property value="user.id" /></td>
	<td><s:property value="user.name" /></td>
</tr>

 以上是前端页面获取到数据,接下来是前端页面提交数据到服务器,服务器接收数据

假如有一个用来处理客户的 CustomerAction 类, 该动作类实现了 ModelDriven 接口,当用户触发CustomerAction 动作时, ModelDriven 拦截器将调用相关CustomerAction 对象的 getModel() 方法, 并把返回的模型(Customer实例)压入到 ValueStack 栈. 接下来 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 因为此时 ValueStack 栈的栈顶元素是刚被压入的模型(Product)对象, 所以该模型将被填充. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象.

Department department = new Department();
/**
* 把model的值赋值给了department
*/
BeanUtils.copyProperties(this.getModel(), department);

 

 
  • 大小: 48 KB
  • 大小: 38.4 KB
  • 大小: 60.6 KB
0
0
分享到:
评论

相关推荐

    struts2 标签 OGNL

    除了OGNL,Struts2还提供了一个丰富的标签库,包括UI标签和非UI标签。UI标签主要用于创建HTML表单,非UI标签则提供控制逻辑,如条件语句。UI标签通常有通用属性,比如`label`用于设置控件的名称,`labelposition`...

    Struts2_OGNL

    值栈是Struts2框架中的核心概念之一,它是一个用于临时存储对象的栈结构,这些对象包括Action实例、模型对象、临时对象等。值栈中的对象可以按照以下四种类型划分: 1. 栈顶对象:在程序执行过程中,由容器自动创建...

    struts2 OGNL之&lt;s:property&gt;标签访问值栈(value stack)用法

    在这个主题中,我们将深入探讨OGNL(Object-Graph Navigation Language)以及如何通过`&lt;s:property&gt;`标签来访问Struts2中的值栈(Value Stack)。值栈是Struts2中一个核心的概念,它是一个存储用户请求数据和应用...

    Struts2的标签库及OGNL表达式语言

    Struts2是一个流行的Java web开发框架,其核心特性之一就是使用OGNL(Object-Graph Navigation Language)作为表达式语言,并提供了丰富的标签库来简化视图层的开发。本篇文章将详细探讨Struts2中的OGNL表达式语言...

    java的Struts中的OGNL标签的使用,详细介绍

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在值栈中获取和设置对象属性,以及执行各种操作。本篇文章将详细介绍如何在Struts2中使用OGNL标签。 OGNL作为Struts2的核心...

    struts2标签和OGNL表达式

    在Struts2中,OGNL表达式通常与Struts标签结合使用,如`s:property`标签,用于显示对象的属性值。例如,`&lt;s:property value="name"/&gt;`将显示栈顶对象的"name"属性值。栈顶对象是指在ValueStack(值栈)中位于最顶层...

    struts2中的ognl

    使用OGNL时,通常配合Struts2的标签,比如`s:property`,通过值栈来访问和显示数据。 3. **EL与值栈的区别**: - Expression Language(EL)虽然也能访问值栈,但它只能从栈顶开始查找,而OGNL可以更灵活地遍历...

    struts2标签和OGNL表达式.pdf

    在Struts2中,OGNL被用于处理各种对象,包括值栈(Value Stack)、请求、会话、应用范围的属性等。它能够对这些对象进行查询、操作和修改。OGNL表达式的格式通常包括对对象、属性和方法的引用。例如,可以使用OGNL...

    struts2_ognl实验代码

    在"4-5struts2的标签库-值栈-OGNL"这个实验代码中,你会看到如何在Struts2中集成OGNL。Struts2的核心组件之一是值栈(Value Stack),这是一个存储请求相关的数据结构。当一个Action执行后,它的结果会放在值栈的...

    struts2中siterator 标签的使用详解 及 OGNL用法

    同时,OGNL (Object-Graph Navigation Language) 是 Struts2 中的表达式语言,用于访问和操作对象的属性。接下来,我们将详细介绍 `siterator` 标签的使用和 OGNL 的用法。 1. **siterator 标签的属性**: - **...

    Struts2中的OGNL

    2. **值栈**:Struts2使用值栈来存储请求中的所有对象,OGNL可以从值栈中查找并访问对象,如`#request`, `#session`, `#application`等。 3. **JSP标签**:在JSP页面中,Struts2的标签库使用OGNL表达式来获取和显示...

    Struts 2中的OGNL .rar

    3. **值栈(Value Stack)**:值栈是Struts 2的核心组件之一,它是一个存储Action对象和其他相关数据的栈结构。OGNL通过值栈来查找和设置对象的属性,使得视图层可以直接访问模型层的数据。 4. **#root和#action...

    Struts2 & OGNL

    1. **值栈(Value Stack)**: Struts2的核心概念之一是值栈,它是一个存储用户请求数据的对象集合。OGNL通过值栈来查找和操作这些数据,使得视图能够直接访问Action对象的属性,而无需显式地将数据传递给JSP。 2. *...

    struts2标签库

    值栈使得标签库可以直接访问对象,而不需要在视图层和对象之间建立硬连接。通过OGNL(Object Graph Navigation Language),开发者可以方便地在ValueStack中导航和操作对象。 在使用Struts2标签库前,需要在JSP页面...

    Struts2深入学习----OGNL表达式原理

    在Struts2的ActionContext中,OGNL查找值栈(ValueStack),这是一个存储所有请求相关对象的数据结构。值栈顶部的对象通常为Action实例,OGNL表达式会在此对象及其关联的对象图中查找属性。 Struts2的标签库也广泛...

    OGNL百度百科OGNL百度百科

    - Struts2 使用 OGNL 作为默认的表达式语言,并提供了丰富的标签库,例如 `&lt;s:property value="name"/&gt;` 可以用来显示 `name` 属性的值。 #### 三、OGNL 的实现原理 OGNL 实现的核心是 Context 结构,其实质是一个...

    07-01-Struts标签.pdf

    1. **数据标签**:这类标签主要用于从值栈(Value Stack)上取值或者向值栈赋值。数据标签在Struts2中扮演着数据传输和处理的角色。 2. **控制标签**:控制标签用于控制程序的执行流程,比如执行条件判断和循环控制...

    struts2 ognl

    2. **值栈**:值栈是Struts2处理请求的核心组件,它维护了一个对象栈,每个请求对应一个栈顶对象。默认情况下,Action实例位于栈顶,可以通过`#root`或`#action`来访问。 3. **EL与OGNL的集成**:虽然Struts2默认...

    OGNL符号的使用

    1. 访问非根对象(Struts 中值栈为根对象),例如:#parameters.id[0] 相当于 request.getParameter("id")。 2. 用于过滤和投影(projecting)集合,例如:books.{?#this.price。 3. 构造 Map,例如:#{'foo1':'bar1...

    使用的ognl的chm

    3. **值栈(Value Stack)**:在Struts2中,OGNL与值栈紧密配合,值栈是一个对象栈,用于存储Action对象和其他数据,方便快速访问。 **OGNL的主要特性:** 1. **动态属性访问**:除了静态字段和方法,OGNL还可以...

Global site tag (gtag.js) - Google Analytics