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

这两天在做论坛项目的时候,犯了一个错误:将数据放入值栈中,结果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. Struts2笔记3--获取ServletAPI和OGNL与值栈

    获取ServletAPI: 第一种方式: //在request域中放入属性req,暂且认为getContext()获取的是request域空间,但实际不是 ActionContext.getConte ...

  2. struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象

    struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...

  3. 框架学习之Struts2(三)---OGNL和值栈

    一.OGNL概述 1.1OGNL是对象图导航语言(Object-Graph Navigation Languaged)的缩写,他是一种功能强大的表达式语言,通过简单一致的表达式语法,可以存取Java对 ...

  4. Struts2 (三) — OGNL与值栈

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

  5. (转)OGNL与值栈

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

  6. OGNL与值栈

    一.OGNL入门 1.什么是OGNL OGNL的全称是对象图导航语言(Object-Graph Navigation Language),它是一种功能强大的开源表达式语言.使用这种表达式语言,可以通过 ...

  7. 4、OGNL与值栈

    一.OGNL 1.什么是OGNL 对象导航图语言(Object Graph Navigation Language),简称OGNL,是应用于Java中的一个开源的表达式语言(Expression La ...

  8. Struts2 中的值栈的理解

    通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求 道服务器端 action时,就有个堆栈,如果action在服务器端 ...

  9. Struts学习之值栈的理解

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

随机推荐

  1. shell之arp命令

    arp: 显示所有的表项. arp -d address: 删除一个arp表项. arp -s address hw_addr: 设置一个arp表项.   常用参数: -a 使用bsd形式输出.(没有 ...

  2. 探路者 FInal冲刺中间产物

    版本控制 https://git.coding.net/clairewyd/toReadSnake.git 版本控制报告 http://www.cnblogs.com/linym762/p/79976 ...

  3. bootstrap table的展开行问题

    照着网上与api里说的添加detailView属性设置为true,detailFormatter属性为展开后的内容,但是设置之后发现,在表格每一行最前面是多出一列正常该显示"+"的 ...

  4. Scrum Meeting 2 -2014.11.2

    今天大家读完代码后又聚在了一块讨论了许多.确定了重点的任务和分工细节.提出了许多问题和改进的方案.还有讨论分析了关于团队作业 - 软件分析和用户需求调查,初步决定目标软件为必应的输入法和词典,团队为争 ...

  5. Linux环境下服务器环境搭建-mysql

    下载对应版本的mysql.rpm(Linux 6 安装el6 Linux 7 安装el7) 安装环境 centos 7,安装版本mysql57-community-release-el7-9.noar ...

  6. <<梦断代码>>读后感

    <梦断代码>中对软件工程所面临的种种困难与艰难的描述,即便再过5年读也许都不过时.因为正如原作者所说,书中描写的是一队人马并肩扛起代码大石,虽历经磨难仍欲将其推上山顶的故事,而正是这种故事 ...

  7. Mininet-Wifi 多接入点(Access Point)实验

    实验简介  这个实验来自Mininet-Wifi用户手册.在本实验中,我们会创建一个有三个AP的线式拓扑,并有三个站点(station)与每个AP通过无线相连.将通过这个时间简单演示一些Mininet ...

  8. 关于jsonp知识的理解

    jsonp 之前知道是用来解决ajax跨域的问题,但是其本质的原理,还是不清楚. 所以看了一下. js的script 的src里面的连接是可以跨域的,所以可以通过她来实现跨域资源获取. 但是也需要后端 ...

  9. [BUAA_SE_2017]个人作业-Week1

    个人作业-Week1 疑问 教材中说,PM在衡量需求时需要方方面面的能力与研究.可是,当下许多互联网IT公司只承担外包业务,即客户给什么需求就实现什么需求,甚至可能不要求其它先进的功能.此时,开发团队 ...

  10. PAT 1054 求平均值

    https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336 本题的基本要求非常简单:给定N个实数,计算它 ...