在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表达式相关推荐

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

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

  2. 6. EL 表达式:${运算表达式}

    文章目录 EL 表达式 1)什么是EL表达式,EL:表达式的作用? 2)EL表达式搜索域数据的顺序 3)EL表达式输出Bean的普通属性,数组属性.List集合属性,map集合属性 EL表达式--运算 ...

  3. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系

    switch 语句对 switch 表达式的结果类型,以及各个 case 表达式中子表达式的结果类型都是有要求的. 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作. 1. sw ...

  4. java中缀表达式转后缀表达式(逆波兰算法)

    四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...

  5. java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...

    本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...

  6. 数据结构实验——中缀表达式转为后缀表达式

    一.实验内容: 编写程序,实现中缀表达式化为后缀式输出. 已知中缀表达式中操作数全部用小写英文字母表示,运算符只含有+, -, *, /四种,定界符只有( )以及结束符#. 二.程序源代码: 运行示例 ...

  7. 九、中缀表达式转为后缀表达式

    使用栈将中缀表达式转为后缀表达式并计算 一.中缀表达式转换为后缀表达式 由于后缀表达式适合计算式进行计算,但是人对于较长的中缀表达式,很难将中缀表达式直接转换为后缀表达式,于是我们使用栈来实现中缀表达 ...

  8. (二)Thymeleaf标准表达式之——简单表达式

    2. 标准表达式(Standard Expression Syntax) 标准表达式包含以下几个方面: 简单表达式: 变量表达式: ${...} 选择变量表达式: *{...} 消息表达式: #{.. ...

  9. 数据结构——栈——中缀表达式和后缀表达式

    什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的. 那么自然而然的明白了后缀表达式是 ...

最新文章

  1. c语言 char转int_C语言关键字及进制的转换你都知道吗?
  2. Android多模块覆盖率,Android代码覆盖率初探—问题已解决!
  3. Xtrabackup的“流”及“备份压缩”功能
  4. 全国计算机等级考试题库二级C操作题100套(第20套)
  5. excel实战应用案例100讲(六)-社会判断理论:模型及应用
  6. CSS清除默认样式,成功入职腾讯
  7. 和菜鸟一起学linux之bluez学习记录2
  8. linux java输出到文件,linux java输出到文件内容
  9. 还以为iPhone安全?多款iOS应用被曝“偷偷”发送用户数据
  10. 定义你自己的Logj4 输出,比如 数据库连接池 database connect pool
  11. java画一只小猫程序代码_android 汤姆猫动画源码(主要就是模仿汤姆猫点击小猫给反应)...
  12. 详解基于深度学习的伪装目标检测
  13. 从学校,到字节跳动,追忆似水流年
  14. 系统设计-开放平台(二)
  15. vue的:href和href
  16. dvdscr是什么意思?什么是dvdscr格式?
  17. 吊炸天的云原生,到底是个啥
  18. 表达式转换(中缀转后缀)
  19. [Vue]学习笔记目录 【Vue2与Vue3完结】 (尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通)
  20. 微信小程序数据填充新闻详情页面

热门文章

  1. 在IT行业里,网工都有啥高含金量的证书可考?
  2. C# DEV TextEdit 设置文本框只能输入数字(整数)
  3. vue组件—支持单选或者多选
  4. 三星“逼供”:40张iPhone和iPad原型图片曝光
  5. 抽屉原理(鸽巢原理)和拉姆齐定理
  6. 轮子四:QT保存数据到 office word文档
  7. Three.js旋转到某个角度模型消失的问题
  8. java多线程编程之线程池技术全面解读
  9. PHP程序员啥意思,php程序员是什么
  10. linux杀掉cpu使用率高的进程,如何解决Linux中CPU使用率高的问题?