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

  结构例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTY2MjMyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  怎样去訪问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;

}

<s:iterator value="list" >

<s:property value="name"/>   <s:property value="email"/> <s:property value="age"/><br/>

</s:iterator>

该标签在迭代的时候,会吧每个迭代对象压入栈顶.





若数据存储在context:

ActionContext.getContext().put("userList", list);

<s:iterator value="#userList" >

<s:property value="name"/>   <s:property value="email"/> <s:property value="age"/><br/>

</s:iterator>



版权声明:本文博主原创文章,博客,未经同意不得转载。

Struts的ONGL的更多相关文章

  1. Struts 2 --ONGL介绍

    先了解一下OGNL的概念 OGNL的全名称Object Graph Navigation Language.全称为对象图导航语言,是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取J ...

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

     一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以 ...

  3. ongl与Struts标签

    一.ONGL OGNL 的全称是“Object-Graph Navigation Language”,即对象图导航语言,它是一种功能强大的开源表达式语言.使用这种表达式语言可以通过某种表达式语法存取  ...

  4. Struts ongl 集合伪属性

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  5. struts总结

    struts总结 1.为什么学习Struts框架 a.Struts框架好处 struts2是主流的开发技术,大多数公司在使用,struts把相关的servlet组件的各种操作都进行了相应的封装,这样就 ...

  6. Struts学习之值栈的理解

    转自:http://blog.csdn.net/hanxuemin12345/article/details/38559979 页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心 ...

  7. struts升级到最高版本后遇到的问题。关于actionmessage传递问题。

    Struts2升级到最新版本遇到的一些问题 首先是更换对应的jar,如asm.common.ongl.struts等等.更换后发现系统启动不了,按照网上的介绍,先后又更新了slf4j-log4j12- ...

  8. struts ValueStack 详解

    一.ValueStack     1.ValueStack是一个接口,在struts2中使用OGNL(Object-Graph Navigation Language)表达式实际上是使用        ...

  9. (二)Struts.xml文件详解

    一.Struts.xml文件 Struts.xml文件构成 如图,<Struts>标签内共有5个子标签. 1.1 struts-default.xml 查看Struts的内容可知,Stru ...

随机推荐

  1. 奋斗的孩子的TableView(三篇文章)

    http://blog.sina.com.cn/s/blog_a6fb6cc90101i8it.html http://blog.sina.com.cn/s/blog_a6fb6cc90101hhse ...

  2. Fragment总结

    一.总体工程图: 二.main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android& ...

  3. 【从0到1学Web前端】CSS伪类和伪元素

    1.CSS中的伪类 CSS 伪类用于向某些选择器加入特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 select ...

  4. JavaScript 中的事件流和事件处理程序(读书笔记思维导图)

    JavaScript 程序采用了异步事件驱动编程模型.在这种程序设计风格下,当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web 浏览器就会产生事件(event). JavaScript ...

  5. 无向图的最短路径算法JAVA实现(转)

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  6. selenium让人摸不着头脑的问题

    selenium让人摸不着头脑的问题 问题一 使用webdriver驱动firefox浏览器时如果不设置参数,默认使用的Firefox的profile和平时打开浏览器使用的firefox不一样,如果要 ...

  7. FZU2181+poj2942(点双连通+判奇圈)

    分析:我们对于那些相互不憎恨的人连边,将每次参加会议的所有人(不一定是全部人,只需人数>=3且为奇数)看做一个点双联通分量,那么每个点都至少有两个点与他相邻.即需要保证双联通分量中存在奇圈.至于 ...

  8. Android中的动画具体解释系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...

  9. 在 window7 window8下公布webService注意问题

    李石磊 学习日记 错误形如: 解决方式: 1.将服务公布,在IIS下创建虚拟文件夹 2.为上面创建的虚拟文件夹创建单独的应用程序,方法是右击虚拟文件夹.点击"加入应用程序...", ...

  10. 【转】Vim学习资料

    初学资料:1:一个介绍VIM操作的游戏,十分适合初学者.只是:不要怕英文.vim-adventures.com2:http://blog.csdn.net/niushuai666/article/de ...