EL与OGNL以及值栈的理解
这里先添加下在项目遇到的问题:
这两天在做论坛项目的时候,犯了一个错误:将数据放入值栈中,结果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以及值栈的理解相关推荐
- java struts2值栈ognl_Struts2 (三) — OGNL与值栈
一.OGNL表达式 1.概述 1.1什么是OGNL OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...
- (转)OGNL与值栈
http://blog.csdn.net/yerenyuan_pku/article/details/67709693 OGNL的概述 什么是OGNL 据度娘所说: OGNL是Object-Graph ...
- Struts2框架--学习笔记(下):OGNL表达式、值栈操作、拦截器、struts2标签、文件上传
一.OGNL概述:OGNL是一种表达式 (1)在struts2中操作值栈数据. (2)一般把ognl在struts2中操作,和struts2标签一起使用操作值栈. (3)ognl不是strut2的一部 ...
- 关于Struts2中的值栈与OGNL表达式
1.1.1 OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL :OGNL比EL功能强大很多倍. 它是一个开源项目. ...
- java值栈_Struts2 中的值栈是什么?
7.1值栈 7.1.1值栈是什么 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Result.I ...
- Struts2中的值栈
一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在 ...
- java 值栈的结构_Struts2 | 深入浅出理解struts2中的值栈
在没有struts框架的时候,我们通常在Servlet中使用域对象进行存值和取值,将其作为载体来承载页面和后台之间的数据传递. 在struts2中,我们又有了一种新的机制来进行数据的传递. 那就是st ...
- java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊
Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...
- struts2值栈、struts2标签、ONGL表达式、EL表达式、JSTL表达式、jsp标签
1.struts2值栈: 参考:https://blog.csdn.net/superit401/article/details/83994149 (1) ValueStack是Struts2的一个接 ...
最新文章
- Daivik VM 和 JVM 的比较
- Scala协变与Java泛型
- perl里字符串取长度,比较等一些操作
- JavaScript快速上手入门
- Teechart动态设计方法
- oracle unused 语法_oracle--set unused
- webpack --- 发布环境的配置 代码压缩 代码分类
- hadoop框架详细分析
- 20190814:(leetcode习题)移动零 (补)
- [原]浅谈几种服务器端模型——多进程并发式
- 手机号码校验、邮箱校验
- 数据bag中的激光雷达数据和相机数据分割出来
- SSO单点登录原理详解(从入门到精通)
- 怎么把日程提醒放在手机桌面
- docker搭建searx_『颜值即正义』看小睿“自建搜索引擎”
- 试验数据管理平台解决方案--MDM
- 【水题】hzy 和zsl 的生存挑战
- 玩转华为数据中心交换机系列 | 配置动态路由接入M-LAG
- 【matplotlib】绘制简单二维、三维图像
- 计算机科学与技术的需求,计算机科学与技术专业市场需求分析
热门文章
- AXI DMA DRIVER 阶段性 kernel driver 构建并测试(三 )
- linux 进程 内存布局 初探
- 关于 #!/bin/bash脚本头文件的类型说明
- c语言中throw的用法,C中的内联throw()方法
- apache httpclient 工具类_Java教程分享使用HttpClient抓取页面内容
- matlab 灰色Verhulst预测模型
- vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)
- 数据库基础 (六)单表查询进阶
- Sublime text3!行首,行尾,批量编辑!
- VUE2.X组件之间通信的2种方式(针对子组件值变化去改变相应父组件的值)