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讲解

OGNL是Struts 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>

The value of key "foo1" is bar1

不使用%:#foobar['foo1']

使用%:bar1

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>

--------理解二

两者都是在服务器端执行的,JSP转化为servlet并编译为java文件,其中会把EL,OGNL,<% %>等解释出来,并返回给客户端。

OGNL表达式依赖于struts2标签,必须结合struts2标签使用,如:<s:property value="#student.name"></s:property>

但是<a href="checkInfo.jsp?id=%{#student.studentid}">查看信息</a>这样是不行的,因为<a>标签不是struts2标签

当然可以把它改为<s:a href="checkInfo.jsp?id=%{#student.studentid}">查看信息</s:a>这样就行.

说明:<s:a href="checkInfo.jsp?id=%{#student.studentid}">中%{ }作用是告诉解释器,这之间的代码为OGNL表达式,这很有用。

EL表达式形式为${内容},如${sessionScope.user.name}.  不能用在java表达式<% %>之内,因为两者是两种不同的表达式。

EL表达式不能用在struts2标签里。

EL表达式能用在内部文件的js里(jsp被解释时,内部文件的js代码也被解释,然后发送到客户端,而外部js文件是在客户端执行的,所以EL表达式不能用在外部js文件里)

如:alert("${sessionScope.user.name}"), 加上双引号或单引号。

说明:js文件里不能使用OGNL表达式(因为它只能结合struts2标签使用)

EL和OGNL表达式的区分的更多相关文章

  1. struts2中#,$,%的用法以及el,ognl表达式的用法

    OGNL, JSTL, STRUTS2标签中符号#,$,%的用法示例 取Session中的值 <c:out value="${sessionScope.user.userId}&quo ...

  2. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

  3. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...

  4. el表达式跟ognl表达式的区别(转)

    EL表达式: >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application.>>如果在struts环境中,它除了有在上面的 ...

  5. el表达式跟ognl表达式的区别

    :  EL表达式 单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application. 如果在struts环境中,它除了有在上面的四个作用域的取值功能外,还 ...

  6. OGNL表达式与EL表达式

    一.OGNL表达式 a)什么是OGNL? OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言, 通过它简单一致的表达式语法.主要功能:    ...

  7. OGNL表达式介绍

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存 ...

  8. (转)OGNL表达式介绍

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存 ...

  9. OGNL表达式中的#、%和$

    $是el表达式  % #是ognl表达式.  http://devilkirin.iteye.com/blog/427375 OGNL表达式非常强大-其中#.%.$这三个符号在OGNL表达式中经常出现 ...

随机推荐

  1. @Transactional事务几点注意

    这里面有几点需要大家留意:A. 一个功能是否要事务,必须纳入设计.编码考虑.不能仅仅完成了基本功能就ok.B. 如果加了事务,必须做好开发环境测试(测试环境也尽量触发异常.测试回滚),确保事务生效.C ...

  2. ios成长之每日一遍(day 6)

    toolBar上的View Switcher BIDAppDelegate.h #import <UIKit/UIKit.h> @class BIDSwitchViewController ...

  3. linux 统计文件夹空间

     du -sh * | sort -nr 

  4. 用ImageSwitcher实现显示图片(更改图片时有动画效果)

    ImageView和ImageSwitcher都是用来显示图片的.只不过后者在更新显示的图片的时候可以有动画效果. 注意点: 1.ImageSwitcher初始化需要定义一个ViewFactory,该 ...

  5. GridView和SimpleAdapter实现网格布局

    android:horizontalSpacing 元素之间的水平间距 android:verticalSpacing     元素之间的垂直间距 android:numColumns         ...

  6. Orchard之Module升级

    在上一篇中,我们提到了 Migrations,这一篇稍微衍生一下. 1:Migrations 是什么 Orchard 提供了模块升级的功能,即,如果我们模块发布后,需要进行升级,我们可以通过编码来实现 ...

  7. ImportError: No module named caffe.proto解决办法

    原文   https://blog.csdn.net/lanyuelvyun/article/details/73628152 在用自己的数据训练基于caffe的SSD模型的时候,我们需要将图片数据转 ...

  8. Sql server 备份还原后出现“受限制用户”问题

    SQL数据库作备份和还原操作几乎是日常性事务了.但某次在对Sql Server 2005 数据库做备份还原后经常出现数据库“受限制用户”的问题 工具/原料 Windows OS SQL DB 步骤/方 ...

  9. Shell变量while循环内改变无法传递到循环外

    转自: https://blog.csdn.net/shawhe/article/details/65631543 今天刷Leecode(192 Word frequency)时,遇到一个shell语 ...

  10. SpringBoot整合Quartz定时任务 的简单实例 2

    (1)什么是Quartz?(2)Quartz的特点:(3)Quartz专用词汇说明:(4)Quartz任务调度基本实现原理: 接下来看下具体的内容: (1)什么是Quartz? Quartz是一个完全 ...