EL表达式 与ONGL表达式
在SSH商城学习中我们在使用struts2,大大简化了我们对视图页面的编写,struts的标签、页面导航、模板都提供了极佳的扩展性,实现了更好的代码复用。当页面显示复杂时还可以在页面中自定义组件,满足多变的需求。这里着重介绍标签库taglib,它不依赖于任何表现层技术,可以再各种页面显示当然包括jsp
准备:
(1)在要使用标签的jsp页面引入标签库:
<%@ taglib uri="/struts-tags" prefix="s"%>
(2)在web.xml中声明要使用的标签 这样是struts2 2.3.1.2版本的引入方式
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter>
EL表达式:
单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.
如果在struts环境中,它除了有在上面的四个作用域的取值功能外,还能从值栈(valuestack)中取值.
特点:
1:${name},name在值栈中的查找顺序是:先从对象栈中取,取到终止,否则,向map中取。
2:在对象栈的查找顺序是,先从model中找是否有name这个属性,找到终止,否则,找action中是否有name这个全局变量。
3:${#name},里面的是不带#号的。
4:如果放在对象栈中的是一个自定义的对象,那么${property}里面可以直接去该对象的属性值,不用这样${object.property}
使用:
1) el可以取对象的属性值比如${sessionScope.student.name},student是一个bean,有相应的getter/setter方法。对于使用el存对象的值,见得少。
2)el可以取变量的值${name}按照page request.session application的范围找name变量,找到就立即返回不再继续寻找,找不到就null.也可以指定范围如${requestScope.name}3)自动类型转换一个jsp跳转到另一个jsp页面,参数都是String类型,但是el可以自动类型转换比如${param.age+12}
OGNL表达式:
1:读取从后台传递的值
%{#name}:表示从值栈的map中取值
%{name}:表示从值栈的对象栈中取值
%{#request.name}:表示从request域中取值
2:自己构建数据
List<s:iterator var="list" value="pageBean">
OGNL(Object Graph Navigation Language),是一种表达式语言。使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。如果我们把表达式看做是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。既然OGNL那么强大,那么让我们一起来研究一下他的API,看看如何使用OGNL.
Struts2中将应用范围里的数据以及Action处理的数据都存储在一个区域里。在Struts2中叫做“valueStack”,中文名为“值栈”。而OGNL就是从“值栈”取出数据,并在某些条件下进行数据过滤和计算的表达式语言。在Struts2中值栈作为OGNL的根对象,从值栈中取出自己需要的数据,而且值栈存取数据是按照先入后出的概念。因此查询数据时候往往是值栈中最顶部的数据先被查询出来。更加需要指出的是在值栈中也可以使用索引,可以在指定的索引位置开始搜索数据。
在OGNL中如果搜索的数据不是值栈里存储的数据,而且其他对象中,特别是Struts2的ActionContext中的对象,则在访问这些对象时候,前面要加“#”。比如ognl.jsp中访问session和request对象时候代码中在request和session之前就有“#”。
用法区别:引入标签taglib OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="#xx" /> struts页面中不能单独使用,el可以单独使用 ${sessionScope.username}
页面取值区别:
名称 |
servlet |
ognl el |
parameters |
request.getParameter("username") |
#username ${username} |
request.getAttribute("userName") |
#request.userName ${requestScope.username} |
|
session |
session.getAttribute("userName") |
#session.userName ${sessionScope.username} |
application |
application.getAttribute("userName") |
#application.userName ${applicationScope.username} |
attr |
用于按request > session > application顺序访问其属性(attribute) |
#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为 |
EL表达式 与ONGL表达式相关推荐
- struts2值栈、struts2标签、ONGL表达式、EL表达式、JSTL表达式、jsp标签
1.struts2值栈: 参考:https://blog.csdn.net/superit401/article/details/83994149 (1) ValueStack是Struts2的一个接 ...
- 6. EL 表达式:${运算表达式}
文章目录 EL 表达式 1)什么是EL表达式,EL:表达式的作用? 2)EL表达式搜索域数据的顺序 3)EL表达式输出Bean的普通属性,数组属性.List集合属性,map集合属性 EL表达式--运算 ...
- Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系
switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...
- java中缀表达式转后缀表达式(逆波兰算法)
四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...
- java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...
本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...
- 数据结构实验——中缀表达式转为后缀表达式
一.实验内容: 编写程序,实现中缀表达式化为后缀式输出. 已知中缀表达式中操作数全部用小写英文字母表示,运算符只含有+, -, *, /四种,定界符只有( )以及结束符#. 二.程序源代码: 运行示例 ...
- 九、中缀表达式转为后缀表达式
使用栈将中缀表达式转为后缀表达式并计算 一.中缀表达式转换为后缀表达式 由于后缀表达式适合计算式进行计算,但是人对于较长的中缀表达式,很难将中缀表达式直接转换为后缀表达式,于是我们使用栈来实现中缀表达 ...
- (二)Thymeleaf标准表达式之——简单表达式
2. 标准表达式(Standard Expression Syntax) 标准表达式包含以下几个方面: 简单表达式: 变量表达式: ${...} 选择变量表达式: *{...} 消息表达式: #{.. ...
- 数据结构——栈——中缀表达式和后缀表达式
什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的. 那么自然而然的明白了后缀表达式是 ...
最新文章
- c语言 char转int_C语言关键字及进制的转换你都知道吗?
- Android多模块覆盖率,Android代码覆盖率初探—问题已解决!
- Xtrabackup的“流”及“备份压缩”功能
- 全国计算机等级考试题库二级C操作题100套(第20套)
- excel实战应用案例100讲(六)-社会判断理论:模型及应用
- CSS清除默认样式,成功入职腾讯
- 和菜鸟一起学linux之bluez学习记录2
- linux java输出到文件,linux java输出到文件内容
- 还以为iPhone安全?多款iOS应用被曝“偷偷”发送用户数据
- 定义你自己的Logj4 输出,比如 数据库连接池 database connect pool
- java画一只小猫程序代码_android 汤姆猫动画源码(主要就是模仿汤姆猫点击小猫给反应)...
- 详解基于深度学习的伪装目标检测
- 从学校,到字节跳动,追忆似水流年
- 系统设计-开放平台(二)
- vue的:href和href
- dvdscr是什么意思?什么是dvdscr格式?
- 吊炸天的云原生,到底是个啥
- 表达式转换(中缀转后缀)
- [Vue]学习笔记目录 【Vue2与Vue3完结】 (尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通)
- 微信小程序数据填充新闻详情页面