EL表达式 与ONGL表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z15732621582/article/details/62215656

      在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属性,直到找到为

 


展开阅读全文

没有更多推荐了,返回首页