Struts的ONGL

1.什么是OGNL

OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,

它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。

功能比EL强的N倍.

OGNL仅仅只是一种表达式语言而已,使用它必须结合Struts2的标签.

讲解OGNL比先了解ValueStack(值栈),Struts2核心.

2.值栈是对应每一个请求对象的轻量级的内存数据中心。

(把一次请求相关的所有数据全部保存到ValueStack对象).

(1).ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础。

(2).ValueStack贯穿整个Action的生命周期:每个Action类的实例都拥有一个ValueStack对象。 ValueStack相当于数据的中转站,在其中保存当前Action 对象和其他相关对象信息。

(3).Struts2框架把ValueStack对象保存在名为“struts.valueStack”的request属性中。

request.setAttribute("struts.valueStack",vs);

3.ValueStack内部结构

ValueStack中存两个属性:

1.root:根, 类型 CompoundRoot,其本质是ArrayList.

  2.context:上下文,类型是Map

  结构如下图:

  如何去访问ValueStack中的数据:

<s:property value=""/>

若访问的是root里的数据,就直接访问. <s:property value="属性名"/>

若访问的是context里的数据,得使用.#<s:property value="#属性名"/>

4.如何获得值栈对象

方式1:

ValueStack vs = (ValueStack)requets.getAttribute("struts.valueStack");

方式2:

ValueStack vs = ActionContext.getContext().getValueStack();

5.向值栈保存数据(主要针对root对象)4种方式:

①.将数据保存root的索引0位置,放置到第一个元素 ArrayList.add(0,element);

valueStack.push("一叶扁舟");数据压栈

②.在值栈创建参数map,将数据保存到map中

valueStack.set("age", "22");

一般的,我们只要在Action类中提供属性的访问方法(getXxx). 就会被自动压到栈顶.

class xxAction{}

private User user;

//属性user

public User getUser() {

return user;

}

}

<s:property value="user.name"/>

<s:property value="user.age"/>

Struts2支持使用EL表达式来获取信息. Strutss重新改写了EL获取属性的代码

6.向值栈保存数据(主要针对contextt对象)两种方式:

ActionContext.getContext().getContextMap().put("name", "一叶扁舟");

//简单方式

ActionContext.getContext().put("name", "无悔");

ValueStack在开发中的应用

主流应用 : 值栈 解决 Action 向 JSP 传递 数据问题

Action 向JSP 传递数据处理结果 ,结果数据有两种形式

1) 消息 String类型数据

super.addFieldError("msg", "字段错误信息");

super.addActionError("Action全局错误信息");

super.addActionMessage("Action的消息信息");

fieldError 针对某一个字段错误信息 (常用于表单校验)、

actionError (普通错误信息,不针对某一个字段 登陆失败)、

actionMessage 通用消息

在jsp中使用 struts2提供标签 显示消息信息

<s:fielderror fieldName="msg"/>

<s:actionerror/>

<s:actionmessage/>

2) 数据 (复杂类型数据)

<s:iterator />标签

若数据存储在root:

public List<User> getList() {

return list;

}

时间: 2024-10-27 07:58:44

Struts的ONGL的相关文章

Struts 2 --ONGL介绍

先了解一下OGNL的概念 OGNL的全名称Object Graph Navigation Language.全称为对象图导航语言,是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性.调用Java对象树的方法.同时能够自动实现必要的类型转化. OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示.它里面可以存放很多个JavaBean对象.它有一个上下文根对象. 值栈(ValueStack) : 可以在值栈中放入.删除.查询对象

Struts-接收表单的值

接收表单的值: 乱码问题:<constant name="struts.i18n.encoding" value="GBK"></constant> A:属性设值的方式 (1):简单:在Action设置属性,生成SET与GET方法. 参数的名称与属性的名称一致. (2):Action中设置Bean的属性 Bean必须生成SET.GET方法.Bean不可以实例化. Bean中必须要有一个默认的空参数的构造方法. 参数的名称 = bean的名称.

Struts ongl 集合伪属性

首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能. 此外,还得先需弄懂OGNL的一些知识: 1.OGNL表达式的计算是围绕OGNL上下文进行的. OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示.它里面可以存放很多个JavaBean对象.

JSTL、EL、ONGL、Struts标签的区别与使用

 一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以使用定制标签库,Jstl使JSP开发开发者可以减少对脚本元素的需求,甚至可以不需要它们. 定义 JSTL(JSP StandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持JSP1.2和Ser

Struts中的ONGL

1.值栈 ValueStack                     值栈也是一块内存空间,是堆heap和栈stack之外的空间.                     ActionContext本来就是普通类,为什么获取他的实例,不用new的方式,而用工厂. 2.真正的内存空间的划分:                   单列集合:CompoundRoot extends ArrayList s:debug Value Stack Contents s:debug上半部分:Value St

Struts通配符与值传递

通配符: 在编写视图对应关系的时候有多种方法: 一个action对象使用默认的execute方法在配置文件中一个配置: <action name="user_add" class="me.rain.action.UserAction> <result>user/add.jsp</result> </action> 在一个action中有多种方法,这样可以减少action对象的数量,但是不会减少配置的数量: <action

【SSH异常系列】The Struts dispatcher cannot be found.

最近在SSH中使用ONGL表达式的时候一直报错,其根本的错误是:The Struts dispatcher cannot be found. 最后的解决方法是 将struts.xml中配置的过滤器类型改为 /* 用ONGL表达式的时候必须要使用/*. 版权声明:本文为博主原创文章,未经博主允许不得转载.

(二)Struts.xml文件详解

一.Struts文件 Struts文件构成 如图,<Struts>标签内共有5个子标签. 1.1 struts-default.xml 查看Struts的内容可知,Struts的默认包"default"是继承于"Struts-dafault"包的,struts-default包是在struts-default.xml中定义,struts-default.xml也是Struts2默认配置文件,所以Struts2每次都会自动加载 struts-default

Struts2 笔记(2) --Struts传值/跳转/拦截器/注解等

1.action中如何接受页面传过来的参数 第一种情况:(同名参数) 例如: 通过页面要把id=1 name=tom age=20这三个参数传给action 1.action里面定义三个成员变量id name age,这个三个变量的名字一定要和所传变量的名字一致. 2.提供get/set方法 3.将来页面把这三个参数传过来的时候,struts2框架会自动的帮我们把这个三个参数值放action中的三个属性里面.(同时还做了类型的转换) 注意:这个工作其实是由defaultStack这个拦截器栈里面