EL表达式和JSTL标签

EL概念

JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段。所以我们先来学习EL表达式。

EL主要用于查找作用域中的数据,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为。

EL基本格式

${表达式}

所有的EL都是以“${”开始,以“}”结尾

表达式与开始符和终结符的空格被忽略

表达式的值为null,则在页面中显示为一个空字符串,而不是null

例如: ${loginInfoBean.suser}

此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值;
例如:Hello {loginInfoBean.suser} ${loginInfoBean.spwd}

EL语法组成-标识符
EL表达式由标识符、存取器、文字和运算符组成。

标识符用来标识存储在作用域中的数据对象。EL 有 11 个保留标识符,对应于 11个EL隐式对象。除了11隐式对象外,假定所有其它标识符都用来标识作用域的变量。

使用EL的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。

el-scope

EL存取器
存取器用来检索对象的特性或集合的元素。

存取器: 通过 “[]” 或 “.” 符号获取相关数据

例:
${userBean.suser} 或 ${userBean[“suser”]}
//获取输出bean中的suser属性值;
${mcType[“id”]} //获取map中key为id对应的值;

EL运算符

运算符允许对数据和文字进行组合以及比较。

EL运算符:

el-oper

验证运算符(empty):对于验证数据特别有用。empty 运算符采用单个表达式作为其变量(也即,${empty input}),并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为 null 的表达式被认为是空,即无元素的集合或数组。如果参数是对长度为零的 String 求值所得的结果,则 empty 运算符也将返回 true。

EL文字

文字表示固定的值 — 数字、字符、字符串、布尔型或空值。

在 EL 表达式中,数字、字符串、布尔值和 null 都可以被指定为文字值。字符串可以用单引号或双引号定界。布尔值被指定为 true 和 false;

JSTL是什么
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL1.0 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。xml 库包含一些标记,这些标记用来操作通过XML表示的数据,而 sql 库定义了用来查询关系数据库的操作。 两个 JSTL 标记库验证器允许开发人员在其 JSP 应用程序中强制使用编码标准。

JSTL标准标签库内的标签

jstl-tag

核心标签库

JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。

(1)表达式控制标签:out标签、set标签、remove标签、catch标签。

(2)流程控制标签:if标签、choose标签、when标签、otherwise标签。

(3)循环标签:forEach标签、forTokens标签。

(4)URL操作标签:import标签、url标签、redirect标签。

在JSP页面引入核心标签库的代码为:

<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>

下面将按照功能分类,分别讲解每个标签的功能和使用方式。

一、表达式控制标签

表达式控制分类中包括<c:out>、<c:set>、<c:remove>、<c:catch>4个标签,现在分别介绍它们的功能和语法。

1.<c:out>标签

【功能】:用来显示数据对象(字符串、表达式)的内容或结果。

在使用Java脚本输出时常使用的方式为:

<% out.println(“字符串”)%>

<%=表达式%>

使用<c:out>标签就可以实现以上功能。

<c:out value=”字符串”>

<c:out value=”EL表达式”>

PS:

<!– escapeXml指定显示的样式是html还是文本 –>
<c:out value=”${abc}” default=”找不到值” escapeXml=”false”></c:out>
<c:out value=”${u.name}”></c:out>||<c:out value=”${u.passwd}”></c:out>

提示:JSTL的使用是和EL表达式分不开的,EL表达式虽然可以直接将结果返回给页面,但有时得到的结果为空,<c:out>有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入<c:out>标签中。

2.<c:set>标签

功能:主要用于将变量存取于JSP范围中或JavaBean属性中。

<c:set>标签的编写共有4种语法格式。

语法1:存值,把一个值放在指定(page、session等)的map中。

<c:set value=”值1” var=”name1” [scope=”page|request|session|application”]>

含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。

含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。

语法3:<c:set value=”值3” target=”JavaBean对象” property=”属性名”/>

含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。

PS:

<c:out value=”${abc}”></c:out>

3.<c:remove>标签

<c:remove>标签主要用来从指定的JSP范围内移除指定的变量。

【语法】:

<c:remove var=”变量名” [scope=”page|request|session|application”]/>

其中var属性是必须的,scope可以以省略。

4.<c:catch>标签:用来处理JSP页面中产生的异常,并将异常信息存储。

【语法】:<c:catch var=”name1”>

容易产生异常的代码

</c:catch>

【参数说明】:

var表示由用户定义存取异常信息的变量的名称。省略后也可以实现异常的捕获,当就不能显示的输出异常信息。

PS:

<c:catch var=”myexception”>
<%int i = 8/0; %>
</c:catch>
<c:out value=”${myexception.message}”></c:out>

二、流程控制标签

流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:<c:if>标签、<c:choose>标签、<c:when>标签和<c:otherwise>标签。下面将介绍这些标签的功能和使用方式。

1)<c:if>标签

<c:if>同程序中的if作用相同,用来实现条件控制。

【语法1】:

<c:if test=”条件1” var=”name” [scope=”page|request|session|application”]>

【参数说明】:

(1)test属性用于存放判断的条件,一般使用EL表达式来编写。

(2)var指定名称用来存放判断的结果类型为true或false。

(3)scope用来存放var属性存放的范围。

【使用场景】:在开发中经常会出现不同用户的权限,首先对用户名进行判断(包括进行数据库验证,该功能可以由JavaBean实现,使用EL表达式得到一个布尔型的结果),把判断的结果存放在不同的JSP范围内(比如常用的session内),这样在每个页面都可以得到该用户的权限信息,根据不同权限的用户显示不同的结果。

PS:

<c:if test=”${age<56 and age>20}”>
小于56
</c:if>

2)<c:choose>、<c:when>和<c:otherwise>标签

这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
【语法1】:

<c:choose>
         <c:when>
…..//业务逻辑1
          </c:when>
         <c:otherwise>
…..//业务逻辑2
         </c:otherwise>
</c:choose>
【语法2】:
<c:when text=”条件”>
表达式
</c:when>
【语法3】:
<c:otherwise>
表达式
</c:otherwise>

 

【参数说明】:

(1)语法1为3个标签的嵌套使用方式,<c:choose>标签只能和<c:when>标签共同使用。

(2)语法2为<c:when>标签的使用方式,该标签都条件进行判断,一般情况下和<c:choose>共同使用。

(3)<c:otherwise>不含有参数,只能跟<c:when>共同使用,并且在嵌套中只允许出现一次。

三、循环标签

循环标签主要实现迭代操作。主要包含两个标签:<c:forEach>和<c:forTokens>标签,我们主要是看<c:forEach>标签

该标签根据循环条件遍历集合(Collection)中的元素。

【语法】:

<c:forEach var=”name” items=”Collection” varStatus=”StatusName” begin=”begin” end=”end” step=”step”>

本体内容

</c:forEach>

【参数解析】:

(1)var设定变量名用于存储从集合中取出元素。

(2)items指定要遍历的集合。

(3)varStatus设定变量名,该变量用于存放集合中元素的信息。

(4)begin、end用于指定遍历的起始位置和终止位置(可选)。

(5)step指定循环的步长。

其中varStatus有4个状态属性(见表9-2)。

表9-2 varStatus的4个状态

jstl-for

四、SQL标签库

因为很少在页面中使用sql标签,所以这里我就不作过多的说明了。

 

 

除非注明,Coder文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.alonemonkey.com/el-jstl.html

本文链接:http://www.alonemonkey.com/el-jstl.html