`

EL表达式

    博客分类:
  • JSP
 
阅读更多

EL表达式

 

 

1、EL简介

 

1)语法结构

 

 

  ${expression}

 

2)[]与.运算符

 

  EL 提供.和[]两种运算符来存取数据。

 

  当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如:

 

    ${user.My-Name}应当改为${user["My-Name"] }

 

  如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:

 

    ${sessionScope.user[data]}中data 是一个变量

3)变量

  EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

  因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

  假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。

  属性范围在EL中的名称

      Page   PageScope

      Request     RequestScope

      Session      SessionScope

      Application  ApplicationScope

 

4) 

  1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码.

 

  2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. 

    ${param}表示返回请求参数中单个字符串的值. 

    ${paramValues}表示返回请求参数的一组值.

    pageScope表示页面范围的变量.

    requestScope表示请求对象的变量.

    sessionScope表示会话范围内的变量.

    applicationScope表示应用范围的变量.

 

3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言.

 

4-- EL语言可显示 逻辑表达式如${true and false}结果是false

  关系表达式如${5>6} 结果是false

  算术表达式如 ${5+5} 结果是10

 

5--EL中的变量搜索范围是:page request session application

  点运算符(.)和"[ ]"都是表示获取变量的值.区别是[ ]可以显示非词类的变量

 

 

2、EL隐含对象

1)与范围有关的隐含对象与范围有关的EL

  隐含对象包含以下四个:pageScope、requestScope、sessionScope 和applicationScope;

  它们基本上就和JSP的pageContext、request、session和application一样;

  在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

 

  例如:我们要取得session中储存一个属性username的值,可以利用下列方法:

    session.getAttribute("username") 取得username的值,在EL中则使用下列方法

    ${sessionScope.username}

 

2)与输入有关的隐含对象与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。

  例如我们要取得用户的请求参数时,可以利用下列方法:

    request.getParameter(String name)

    request.getParameterValues(String name)

  在EL中则可以使用param和paramValues两者来取得数据。

  ${param.name}

  ${paramValues.name}

 

3、其他隐含对象

1)cookie

  JSTL并没有提供设定cookie的动作,

  例:要取得cookie中有一个设定名称为userCountry的值,可以使用

    ${cookie.userCountry}

  来取得它。

 

2)header和headerValues

  header 储存用户浏览器和服务端用来沟通的数据

  例:要取得用户浏览器的版本,可以使用

    ${header["User-Agent"]}。

  另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。

3)initParam

  initParam取得设定web站点的环境参数(Context)

  例:一般的方法String userid = (String)application.getInitParameter("userid");

  可以使用 ${initParam.userid}来取得名称为userid

 

4)pageContextpageContext取得其他有关用户要求或页面的详细信息。

  ${pageContext.request.queryString} 取得请求的参数字符串

  ${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串

  ${pageContext.request.contextPath} 服务的web application 的名称

  ${pageContext.request.method} 取得HTTP 的方法(GET、POST)

  ${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)

  ${pageContext.request.remoteUser} 取得用户名称

  ${pageContext.request.remoteAddr } 取得用户的IP 地址

  ${pageContext.session.new} 判断session 是否为新的

  ${pageContext.session.id} 取得session 的ID

  ${pageContext.servletContext.serverInfo} 取得主机端的服务信息

 

4、条件标签

 

1.算术运算符有五个:+、-、*或$、/或div、%或mod

2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

3.逻辑运算符有三个:&&或and、||或or、!或not

4.其它运算符有三个:Empty运算符、条件运算符、()运算符

  例:${empty param.name}、${A?B:C}、${A*(B+C)}

 

5、EL函数(functions)

  语法:ns:function( arg1, arg2, arg3 …. argN)

  其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置

 

6、补充:

 

<%@ taglib prefix="c" http://java.sun.com/jstl/core_rt">http://java.sun.com/jstl/core_rt" %>

 

FOREACH:<c:forEach items="${messages}" var="item" begin="0" end="9" step="1" varStatus="var">……</c:forEach>

OUT:<c:out value="/${logininfo.username}"/>

 

c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的username属性值输出到页面当前位置。

 

${……}是JSP2.0 中的Expression Language(EL)的语法。

它定义了一个表达式,其中的表达式可以是一个常量(如上),也可以是一个具体的表达语句(如forEach循环体中的情况)。

 

典型案例如下:

  ${logininfo.username}这表明引用logininfo 对象的username 属性。

 

我们可以通过“.”操作符引用对象的属性,也可以用“[]”引用对象属性,如

  ${logininfo[username]}与${logininfo.username}达到了同样的效果。

 

“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”,

此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免这一现象的出现)。

与之等同的JSP Script大致如下:

LoginInfo logininfo =(LoginInfo)session.getAttribute(“logininfo”);

String username = logininfo.getUsername();

 

可以看到,EL大大节省了编码量。这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,

对于${logininfo.username}这样的表达式而言,首先会从当前页面中寻找之前是否定义了变量logininfo,

如果没有找到则依次到Request、Session、Application 范围内寻找,直到找到为止。

如果直到最后依然没有找到匹配的变量,则返回null.如果我们需要指定变量的寻找范围,

可以在EL表达式中指定搜寻范围:

  ${pageScope.logininfo.username}

  ${requestScope.logininfo.username}

  ${sessionScope.logininfo.username}

  ${applicationScope.logininfo.username}

 

在Spring 中,所有逻辑处理单元返回的结果数据,都将作为Attribute 被放置到HttpServletRequest 对象中返回

(具体实现可参见Spring 源码中org.springframework.web.servlet.view.InternalResourceView.exposeModelAsRequestAttributes方法的实现代码),

也就是说SpringMVC 中,结果数据对象默认都是requestScope。因此,在Spring MVC 中,以下寻址方法应慎用:

${sessionScope.logininfo.username}

${applicationScope.logininfo.username}

 

-----------------------------

 

${1+2}结果为表达式计算结果,即整数值3。

${i>1}如果变量值i>1的话,将返回bool类型true。

与上例比较,可以发现EL会自动根据表达式计算结果返回不同的数据类型。

表达式的写法与java代码中的表达式编写方式大致相同。

 

IF / CHOOSE:

  <c:if test="${var.index % 2 == 0}">*</c:if>判定条件一般为一个EL表达式。

 

<c:if>并没有提供else子句,使用的时候可能有些不便,此时我们可以通过<c:choose>tag来达到类似的目的:

<c:choose>

  <c:when test="${var.index % 2 == 0}">*</c:when>

  <c:otherwise>!</c:otherwise>

</c:choose>

类似Java 中的switch 语句,<c:choose>提供了复杂判定条件下的简化处理手法。

其中<c:when>子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,而偶数行时输出“!”。

 

经验:1、如果EL表达式无法解析:– <%@ page isELIgnored="false" %>

 

一、JSTL

 

1)EL运算符>;

2)var指定变量,并把EL运算结果赋值给该变量值为true/false;

3)scope:指定 var变量的范围;

 

 

6、迭代标签语法:

 

  <c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“ end=”int” step=“int” >

    //循环体

  </c:forEach>

 

  说明:

   1)items:是集合,用EL表达式;

   2)var:变量名,存放items

   3)varStatus: 显示循环状态的变量

     ①index:从0开始;

     ②count:元素位置,从1开始;

     ③first:如果是第一个元素则显示true;

     ④last:如果是最后一个元素则显示true;

   4)begin:循环的初始值(整型);

   5)end: 循环结束 ;

   6)step:步长,循环间隔的数值;

 

7、<c:otherwise>标签

  例:如果user.wealthy值true,则显示user.wealthy is true.

  <c:choose>

    <c:when test="">user.generous is true.</c:when>

    <c:when test="">user.stingy is true.</c:when>

    <c:otherwise>user.generous and user.stingy are false.</c:otherwise>

  </c:choose>

 

  说明:只有当条件user.generous返回值是true时,才显示user.generous is true.

     只有当条件user.stingy返回值是true时,才显示user.stingy is true.

     其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and user.stingy are false.

     由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用

     <c:choose>、<c:when>和<c:otherwise>标签共同来完成了。

 

8、c:forTokens>标签

  说明:

    items 进行循环的项目 是 无

    delims 分割符 是 无

    begin 开始条件 否 0

    end 结束条件 否 集合中的最后一个项目

    step 步长 否 1

    var 代表当前项目的变量名 否 无

    varStatus 显示循环状态的变量 否 无

 

  例子:

    <c:forTokens items="a:b:c:d" delims=":" var="token">

      <c:out value=""/>

    </c:forTokens>

  这个标签的使用相当于java.util.StringTokenizer类。

   \在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。

 

9、<c:redirect>标签

  说明:标签将请求重新定向到另外一个页面,它有以下属性

    属性 描 述 是否必须 缺省值

    url url地址 是 无

    context /后跟本地web应用程序的名字 否 当前应用程序

  例子:

    <c:redirect url="http://www.yourname.com/login.jsp"/>

    将请求重新定向到http://www.yourname.com/login.jsp页,

  相当于response.setRedirect("http://www.yourname.com/login.jsp");

 

10、<c:param>标签

  说明:

  <c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性

    属 性 描 述 是否必须 缺省值

    name 在request参数中设置的变量名 是 无

    value 在request参数中设置的变量值 否 无

  例子:

    <c:redirect url="login.jsp"><c:param name="id" value="888"/></c:redirect>

    将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888

 

11、<fmt:>格式化标签

  说明:需要导入   <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>

  1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>

  Value:通过EL表达式或<%new Date() %> 取的日期值;

  Pattern:输出的日期格式;

 

    2) 格式化数字<fmt:formatNumber value="${n}" pattern="###,###.##" />

分享到:
评论

相关推荐

    EL表达式的使用详解

    EL 表达式的使用详解 EL 表达式是一种在 Java 服务器页面(JSP)中使用的表达式语言。它提供了一种简单的方式来访问和操作 Java 对象的属性。EL 表达式广泛应用于 JSP、Servlet、JSF 等 Web 开发技术中。本文将详细...

    el表达式用法部分解说

    ### EL表达式详解 EL(Expression Language)表达式在Java Web开发中扮演着重要的角色,尤其是在JSP(Java Server Pages)技术中。本文将详细解释EL表达式的使用方法及其应用场景,帮助开发者更好地理解和掌握这一...

    EL表达式包括字符串处理,时间日期的格式化,数字处理

    ### EL表达式详解 #### 一、EL表达式的概述与基本使用 EL(Expression Language),即表达式语言,是JavaServer Pages (JSP) 2.0标准的一部分,用于简化JSP页面中对数据访问的操作。它允许开发者通过简单的语法在...

    EL表达式的语法介绍

    EL 表达式语法介绍 EL 表达式是 Java 服务器页面(JSP)和 Java 服务器面板(JSF)中使用的一种表达式语言,用于在 Web 应用程序中实现动态内容。EL 表达式可以被解析成数值表达式和方法表达式,其中取值表达式用于...

    jsp页面中EL表达式被当成字符串处理不显示值问题的解决方法

    当EL表达式被错误地当作字符串处理而不是被解析时,会导致其原本要展示的数据无法正确显示。这个问题在使用Java EE 5及以上版本时比较常见。 要解决这个问题,首先需要理解EL表达式的解析与web.xml配置文件中指定的...

    EL表达式使用文档,方便快速使用EL表达式.pdf

    EL 表达式使用文档 EL 表达式(Express Language)是一种强大的表达式语言,用于简化 JSP 页面中的编程。EL 表达式可以嵌入在 JSP 页面内部,减少 JSP 脚本的编写,目的是要替代 JSP 页面中脚本的编写。 EL 表达式...

    JAVAEE实验报告EL表达式和jstl标签库的使用.pdf

    JAVAEE 实验报告 EL 表达式和 JSTL 标签库的使用 EL 表达式(Expression Language)是一种在 JSP 页面中使用的脚本语言,用于简化 JSP 页面的开发。EL 表达式可以访问 JSP 页面中的变量、对象和集合,进行逻辑操作...

    JSTL以及EL表达式所需jar包

    EL表达式是Java EE中的一个强大功能,它允许开发者在JSP页面中简洁地访问和操作应用程序范围内的对象。EL表达式的语法类似于JavaScript,但它的主要目的是提供一种声明式的方式来获取和设置JavaBeans属性。例如,`${...

    EL表达式练习 EL表达式练习

    EL表达式主要用于简化JSP页面中的代码,提高可读性和可维护性。 **EL表达式的基本语法** EL表达式通常以"$"或 "#{}" 开头,如 `${expression}` 或 `#{expression}`。这里的`expression`是一个变量或方法调用,它...

    el表达式EL表达式言语和JSTL

    **EL表达式** EL(Expression Language)表达式是Java服务器页面(JSP)2.0及更高版本中引入的一种轻量级、强大的脚本语言,主要用于简化Java Web应用程序中的数据访问。它允许开发者在JSP页面中直接访问JavaBean...

    jsp中的EL表达式简介

    【JSP EL表达式简介】 EL(Expression Language)是JavaServer Pages(JSP)中的一种简洁的表达式语言,设计的初衷是为了简化JSP页面的编写。EL受到ECMAScript和XPath表达式语言的启发,提供了更高效的方式来访问和...

    EL表达式全解语法中文技术文档

    **EL表达式全解语法中文技术文档** **一、EL表达式基础** EL(Expression Language,表达式语言)是JavaServer Pages(JSP)2.0及更高版本中引入的一种强大的脚本语言,用于简化页面中的数据访问。EL表达式在JSP中...

    EL表达式(很全很强大)

    ### EL表达式详解 #### 一、EL表达式的语法结构及使用 EL(Expression Language)是一种简化了的数据访问语言,用于获取JavaBean属性值或调用其方法等操作。其基本语法结构为`${expression}`,这使得开发者能够在...

    JSTL,EL表达式语法简介

    EL表达式通常在`${}`中书写,比如`${user.name}`用来获取名为`user`的对象的`name`属性。 **JSTL中的核心标签库(Core Tags)**包括用于控制流程、输出、URL处理、条件判断和迭代的标签。例如: - `&lt;c:if&gt;`用于条件...

    JSTL自定义EL表达式

    本资源主要讲解了如何在JSTL中定义和使用自定义的EL表达式,这对于提高JSP页面的可读性和可维护性至关重要。 首先,理解JSTL的基础概念。JSTL由几个核心标签库组成,如fmt、fn、sql、xml等,它们提供了处理日期和...

    el表达式介绍 el表达式使用帮助文档

    EL表达式的主要目标是提高JSP页面的可读性和可维护性,减少脚本代码的数量。 ### EL表达式的基本语法 EL表达式通常以`$`符号开头,后跟大括号`{}`,如`${expression}`。表达式可以是简单的属性引用,也可以包含...

    EL表达式的使用方法

    ### EL表达式的使用方法 #### 一、简介 在Java Web开发中,EL(Expression Language)表达式是一种非常实用的功能,它允许开发者在JSP页面中动态获取对象属性的值或者执行简单的运算操作。通过使用EL表达式,可以...

    EL表达式EL表达式

    **EL表达式(Expression Language)**是Java服务器页面(JSP)技术中的一个重要组成部分,它提供了一种简洁而强大的方式来访问和操作数据,如JavaBeans属性、JSP作用域中的对象等。EL表达式的设计目标是简化JSP页面的...

    el表达式教程,教你学会使用el表达式

    EL 表达式教程 EL(Expression Language)是一种简洁的语言,用于在 JSP 中访问和操作数据。EL 表达式提供了简洁的语法来访问和操作数据,使得开发者可以更方便地在 JSP 中进行数据处理。 基本语法 EL 表达式的...

Global site tag (gtag.js) - Google Analytics