ValueStack详解:EL和OGNL用法

原创 2015年11月23日 22:33:23

       最近在做一个OA的项目,经常出现因为 ${name} 和${#name}的区别导致,界面数据显示不出来。
       所以需要对这两种使用方法进行总结一下。

什么是值栈

值栈概图
       值栈包含两个部分:Stack和Map。在对象栈Stack中存放的是一个个对象,Map中存放的是键值对。

struts2的工作流程

Struts2工作流程
左侧的分别为struts2的各种拦截器。

值栈解析

对于页面请求:xx.action?id=11&name=22&ss=00
       对于请求中的属性,会去从ValueStack中去查找。
       这个是请求,所以url中数据,会查找 Action中的set方法,将内容给赋值。

对与页面的跳转:
       因为页面中有很多数据是从后台获取的。而在JSP开发中,一般是不会出现JAVA代码的,所以要想取得数据,就需要使用表达式。来获取数据。

常用的有EL表达式和OGNL表达式。

操作Map的方法:

ActionContext.getContext().put(k,v);
ActionContext.getContext().get(k);
ActionContext.getContext().getValueStack.put(k,v);
ActionContext.getContext().getValueStack.get(k);

操作Stack的方法:

ActionContext.getContext.getValueStack.push(obj);
ActionContext.getContext.getValueStack.pop(obj);

       不管是数据的访问 还是获取,都涉及到ValueStack的查找顺序:

值栈中的findValue(expr) 的查找顺序

1,从对象栈中查找指定名称的属性,从栈顶开始向下找。
2,如果从对象栈中没有找到属性,则从map中查找对应key的值。找到后就返回。

界面上的常用表达式: EL表达式和OGNL表达式

OGNL表达式

格式:
1,在struts.xml中,OGNL表达式格式为:${name}
2,在JSP中,OGNL表达式的格式为:%{name} 而且只能写在标签的属性中

常见写法:

    user =findValue("user")
    #user =map.get("user")
    #user.name =map.get("user").getName()

值栈中的findValue()的查找顺序

1,先从对象栈中查找指定名称的属性,从栈顶开始向下找。
2,如果没找到,就从map中查找对应key的值。Map.get()  毫无疑问 是从 Map中直接取对应key的值。

       看到这,有人会有疑问了。既然findValue()全都可以找到,为什么还会用 #user 取值。

如果数据在map中,使用 #user 比 使用 user的好处:

       1,省去了先从值栈查找的过程。
       2,如果值栈中恰好有要找的属性,那么找到的数据将不是想要的。造成了数据错误。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Struts2的ValueStack及EL表达式中取ValueStack的内幕

1. Struts2的ValueStack是什么: 参见李腾飞老师的讲解:http://blog.csdn.net/li_tengfei/article/details/6098134 2. Str...

struts2 与 OGNL 表达式,jsp中 利用ognl 在valuestack中取值

关于struts2中利用ognl取得valuestack 中的值例题分析

深度解析Struts2中ValueStack

对于每一个action的调用,Struts在执行相应的动作方法之前会先创建一个名为ValueStack的对象
  • canot
  • canot
  • 2016-04-09 22:01
  • 4705

Struts2小结-ValueStack-OGNL-EL

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

【JavaWeb-18】ActionContext存取数据、ValueStack存取值、EL新查找顺序、iterator、OGNL投影、其他标签、UI主题、防重复提交

1、我们之前说过,OGNL上下文包含ActionContext和ValueStack。我们先来说说ActionContext,它是一个大Map,里面装有4个小Map,分别是application、se...

【Struts2五】ValueStack以及ognl表达式三(iterator标签详解)

ognl表达式之使用iterator迭代ValueStack中的可迭代元素(集合,map,数组。。) 1.在ValueStack中放入数据: public class ...

Struts2_ValueStack,OGNL详解

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

EL,OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例

取Session中的值            ${session.user.userId}   ${sessionScope.user.userId}   &#...
  • ahwr24
  • ahwr24
  • 2011-08-18 14:30
  • 2697

OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例及 EL的基本用法

取Session中的值            ${session.user.userId}   ${sessionScope.user.userId}   &#...

Struts2第九篇【OGNL、valueStack详解】

什么是OGNL表达式?OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式。 Struts2框架使用OGNL作为默认的表达式语言。为什么我们学习O...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)