这里先添加下在项目遇到的问题:

这两天在做论坛项目的时候,犯了一个错误:将数据放入值栈中,结果jsp页面获取不到。

困扰了许久:

总结如下:

(1)每个action对应相应页面的值栈中值的获取,在属于此action的页面上面如果采用OGNL或者EL表达式获取的值都是从此action中获取的。不要将action对应的页面搞乱了

(2)关于EL表达式获取值栈中心的:map和对象栈stack中的值的获取方式:对于两者的获取方式都是${}这种方式,不分#的。

(3)jsp页面的参数获取的形式:

举个例子:

对于struts标签内的OGNL表达式获取对象的值或者属性,比如user:前后什么都没有,是采用findValue()的查找顺序:它在值栈中的查找顺序是:先找stack(对象栈中一般model放最顶上,然后下面是action),再找map。

#user,这种方式的取值是从map中获取值,只要有#的就从map中取。

那么:struts的标签内部是这样获取的,那么EL表达式为什么也能获取到值栈中的值的呢?

首先我们看下EL表达式的查询顺序:它是按照jsp作用域的由小到大查找的:page--request--session--application这个顺序。

但是在struts2的对象栈中,如果想获取对象的值也是可以的,这是是struts2的功能强大之处:当使用了struts2之后,它对request对象进行重写,也就是说有了struts2,EL表达式的查找顺序也有所变化:

page ---request----添加了findValue这个查找(即从值栈中获取值)----session----application

这就是为什么我们在页面使用EL表达式也能获取值栈中的对象的值。

总结添加:EL表达式可以用在普通的HTML标签内部。但是在struts2的标签内部(记住这是标签内部)只能用OGNL表达式或者加了#map中取或者不加#从stack中取。

如果用EL表达式,一般不用写struts的标签,即标签体和EL表达式分开使用。有Struts2的标签,就在内部使用OGNL表示。

可以直接在html标签的标签体使用EL表达式。

值栈问题:struts2的值栈分值和栈,即map类型的数据和存放在栈里面的数据。

ModelDriven的源码:它会将model放在对象栈的栈顶。

从上面,我们看到值栈里面存在着数据中心,里面有些页面传递过来的数据。作用范围:是一个请求,request

那么如何从struts2的数据中心获取数据呢,即jsp页面如何获取这值栈里面的数据呢。

jsp页面获取值栈中心的数据:利用OGNL或者EL表达式获取。

OGNL表达式:

获取map的数据用“#”

OGNL的格式和语法:

有时候如果是表达式的时候,可以不写%{}

对象栈中有默认的搜索行为:所有有时候直接写对象栈中的属性即可,即从对象栈中获取:

若我们从数据库中获取了数据,得向页面传送,这个时候,我们先将数据存放到值栈中,然后jsp页面再从值栈获取。

 

EL表达式:

EL表达式用${}

改为这个EL表达式的格式:数据也可以从值栈中获取;用的是struts2包装了的request对象

封装的源码:

查找顺序:

request中找不到,就从值栈中找。

EL与OGNL以及值栈的理解相关推荐

  1. java struts2值栈ognl_Struts2 (三) — OGNL与值栈

    一.OGNL表达式 1.概述 1.1什么是OGNL ​ OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...

  2. (转)OGNL与值栈

    http://blog.csdn.net/yerenyuan_pku/article/details/67709693 OGNL的概述 什么是OGNL 据度娘所说: OGNL是Object-Graph ...

  3. Struts2框架--学习笔记(下):OGNL表达式、值栈操作、拦截器、struts2标签、文件上传

    一.OGNL概述:OGNL是一种表达式 (1)在struts2中操作值栈数据. (2)一般把ognl在struts2中操作,和struts2标签一起使用操作值栈. (3)ognl不是strut2的一部 ...

  4. 关于Struts2中的值栈与OGNL表达式

    1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. ...

  5. java值栈_Struts2 中的值栈是什么?

    7.1值栈 7.1.1值栈是什么 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Result.I ...

  6. Struts2中的值栈

    一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在 ...

  7. java 值栈的结构_Struts2 | 深入浅出理解struts2中的值栈

    在没有struts框架的时候,我们通常在Servlet中使用域对象进行存值和取值,将其作为载体来承载页面和后台之间的数据传递. 在struts2中,我们又有了一种新的机制来进行数据的传递. 那就是st ...

  8. java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊

    Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...

  9. struts2值栈、struts2标签、ONGL表达式、EL表达式、JSTL表达式、jsp标签

    1.struts2值栈: 参考:https://blog.csdn.net/superit401/article/details/83994149 (1) ValueStack是Struts2的一个接 ...

最新文章

  1. Daivik VM 和 JVM 的比较
  2. Scala协变与Java泛型
  3. perl里字符串取长度,比较等一些操作
  4. JavaScript快速上手入门
  5. Teechart动态设计方法
  6. oracle unused 语法_oracle--set unused
  7. webpack --- 发布环境的配置 代码压缩 代码分类
  8. hadoop框架详细分析
  9. 20190814:(leetcode习题)移动零 (补)
  10. [原]浅谈几种服务器端模型——多进程并发式
  11. 手机号码校验、邮箱校验
  12. 数据bag中的激光雷达数据和相机数据分割出来
  13. SSO单点登录原理详解(从入门到精通)
  14. 怎么把日程提醒放在手机桌面
  15. docker搭建searx_『颜值即正义』看小睿“自建搜索引擎”
  16. 试验数据管理平台解决方案--MDM
  17. 【水题】hzy 和zsl 的生存挑战
  18. 玩转华为数据中心交换机系列 | 配置动态路由接入M-LAG
  19. 【matplotlib】绘制简单二维、三维图像
  20. 计算机科学与技术的需求,计算机科学与技术专业市场需求分析

热门文章

  1. AXI DMA DRIVER 阶段性 kernel driver 构建并测试(三 )
  2. linux 进程 内存布局 初探
  3. 关于 #!/bin/bash脚本头文件的类型说明
  4. c语言中throw的用法,C中的内联throw()方法
  5. apache httpclient 工具类_Java教程分享使用HttpClient抓取页面内容
  6. matlab 灰色Verhulst预测模型
  7. vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)
  8. 数据库基础 (六)单表查询进阶
  9. Sublime text3!行首,行尾,批量编辑!
  10. VUE2.X组件之间通信的2种方式(针对子组件值变化去改变相应父组件的值)