zoukankan      html  css  js  c++  java
  • java---EL与ONGL的区别

    EL表达式: 
    >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.
    >>如果在struts环境中,它除了有在上面的四个作用域的取值功能外,还能从值栈(valuestack)中取值.
    >>特点1:${name},name在值栈中的查找顺序是:先从对象栈中取,取到终止,否则,向map中取。
    >>特点2:在对象栈的查找顺序是,先从model中找是否有name这个属性,找到终止,否则,找action中是否有name这个全局变量。
    >>特点3:${#name},里面的是不带#号的。
    >>特点4:如果放在对象栈中的是一个自定义的对象,那么${property}里面可以直接去该对象的属性值,不用这样${object.property}


    OGNL表达式:
    1:读取从后台传递的值
    %{#name}:表示从值栈的map中取值
    %{name}:表示从值栈的对象栈中取值
    %{#request.name}:表示从request域中取值

    2:自己构建数据
      a,构建Map<s:iterator var="map" value="#{'key1':'value1','key2':'value2'}"/>
      b,构建List<s:iterator var="list" value="{'one','two','three'}">

     

     

    1.区别

    用法区别:OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="#xx" /> struts页面中不能单独使用,el可以单独使用 ${sessionScope.username} 

    页面取值区别:

     名称

    servlet

    ognl                                                                           el

    parameters

    request.getParameter("username")

    #username                                             ${username}

    request

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

    2.ognl讲解

    OGNLStruts 2默认的表达式语言。是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。

     1.#符号的用途一般有三种。    1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext.getContext();;#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。     2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

        3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

    2.%符号 %符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示: 构造Map

    1. <s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />  
    2. <p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>  
    3. <p>不使用%:<s:url value=”#foobar['foo1']” /></p>  
    4. <p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>   
    1. <s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />  
    2. <p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>  
    3. <p>不使用%:<s:url value=”#foobar['foo1']” /></p>  
    4. <p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>   

    3.$符号

    $符号主要有两个方面的用途。    在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。     在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:

    1. <validators>  
    2.     <field name=”intb”>  
    3.             <field-validator type=”int”>  
    4.             <param name=”min”>10</param>  
    5.             <param name=”max”>100</param>  
    6.             <message>BAction-test校验:数字必须为${min}为${max}之间!</message>  
    7.         </field-validator>  
    8.     </field>  
    9. </validators>  
      1. <validators>  
      2.     <field name=”intb”>  
      3.             <field-validator type=”int”>  
      4.             <param name=”min”>10</param>  
      5.             <param name=”max”>100</param>  
      6.             <message>BAction-test校验:数字必须为${min}为${max}之间!</message>  
      7.         </field-validator>  
      8.     </field>  
      9. </validators>  

    本质上这种符号标记就是一种宏定义,在c语言中有过使用,比如define  #    a*b ;这种表达式被一种符号代替表达

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    690. Employee Importance
    1723. Find Minimum Time to Finish All Jobs
    LeetCode 329 矩阵中最长增长路径
    7.2 物理内存管理
    LeetCode 面试题 特定深度节点链表
    LeetCode 100 相同的树
    npm安装包命令详解,dependencies与devDependencies实际区别
  • 原文地址:https://www.cnblogs.com/w-wfy/p/6426724.html
Copyright © 2011-2022 走看看