学过了EL,不试试JSTL吗?

1.下载JSTL

      JSTL下载网址,点击进入
      下载如图所示的两个jar包,并复制到你应用程序的WEB-INF/lib目录下即可。
在这里插入图片描述

2.JSTL库

      JSTL是标准标签库,但它四通过多个标签库来暴露行为的。JSTL的标签可分成5类区域,如下图表所示:
在这里插入图片描述
      在JSP页面中使用JSTL库,必须通过以下格式使用taglib指令:

<%@ taglib uri="uri" prefix="prefix" %>

      例如要使用Core库,必须在JSP页面的开头做出以下声明:

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

      这个前缀可以是任意的。但是,采用惯例能使团队的其他开发人员以及后续加入该项目的其他人员更容易熟悉这些代码。因此,建议使用预定义前缀。

3.一般行为

      下面介绍Core库中用来操作有界变量的3个一般行为:out、set、remove。
(1)out标签
      out标签在运算表达式时,是将结果输出到当前的JspWriter。out的语法有两种形式,有body content和没有body content:

<d:out value="value" />
<c:out value="value">
default value
</c:out>
例如,下列的out标签将输出有界变量X的值
<c:out value="${X}"/>

(2)set标签
      利用set标签,可以完成以下工作:

  • 创建一个字符串和一个引用该字符串的有界变量。
  • 创建一个引用现存有界对象的有界变量。
  • 设置有界对象的属性。

      如果用set创建有界变量,那么,在该标签出现后的整个JSP页面中都可以使用该变量。set标签的语法有4种形式。第一种形式用于创建一个有界变量,并用value属性在其中定义一个要创建的字符串或者现存有界对象:

<c:set value="value" var="varName"/>
下面的set标签则创建了一个名为job的有界变量,它引用请求范围的对象position。变量job的范围为page:
<c:set var="job" value="${requestScope.position}" scope="page"/>

      第二种形式是设置有界对象的属性值。target属性定义有界对象,以及有界对象的属性。对该属性的赋值时通过value属性进行的:

<c:set target="target" property="propertyName" value="value"/>
例如下面的set标签是将字符串“Tokyo”赋予有界对象address的city属性:
<c:set target="${address}" property="city" value="Tokyo"/>

第三种形式与第二种形式相似,只是赋值是作为body content完成的:

<c:set target="target" property="propertyName">
body content
</c:set>
例如,下面的set标签是将字符串“Beijing”赋予有界对象address的city属性:
<c:set target="${address}" property="city">Beijing</c:set>

(3)remove标签
      remove标签用于删除有界变量,其语法如下:

<c:remove var="varName"/>
下面的例子就是删除了页面范围的变量job
<c:remove var="job" scope="page"/>

      注意,有界变量引用的对象不能删除。因此,如果另一个有界对象也引用了同一个对象,仍然可以通过另一个有界变量访问该对象。

4.条件行为

      条件行为用于处理页面输出取决于特定输入值的情况,这在java中是利用if、if…else和switch声明解决的。JSTL中执行条件行为的有4个标签,即if、choose、when和otherwise标签。下面分别对其进行详解。
(1)if标签
      if标签是对某一条件进行测试,假如结果为True,就处理它的body content。测试结果保存在Boolean对象中,并创建有界变量来一弄这个Boolean对象,利用var属性和scope属性分别定义有界变量的名称和范围。if的语法格式如下:

<c:if test="testCondition">
body content
</c:if>

      body content是JSP,当测试条件的结果为True时,就会得到处理。例如,如果找到请求参数user且值为ken,并且找到请求参数password且值为blackcomb,以下if标签将显示“You logged in successfully”

<c:if test="${param.user=='ken'&&param.password=='blackcomb'}">
You logged in successfully.
</c:if>

(2)choose、when和otherwise标签
      choose和when标签的作用与Java中的关键字switch和case类似。也就是说,它们是为相互排斥的条件执行提供上下文的。choose标签中必须嵌有一个或者多个when标签,并且每个when标签都表示一种可以计算和处理的状况。otherwise标签则用于默认的条件块,假如没有任何一个when标签的测试条件结果为True,它就会得到处理。假如是这种情况,otherwise就必须放在最后一个when后。
      choose和otherwise标签没有属性。when标签必须带有定义测试套件的test属性,用来决定是否应该处理body content。
      举个例子,以下代码是测试参数status的值。如果status的值为full,将显示“You are a full member”。如果这个值是student,则会显示“You are a student member”。如果status参数不存在,或者它的值既不是full,也不是student,那么这段代码将序显示任何内容。

<c:choose>
   <c:when test="${param.status=='full'}">
     You are a full member
   </c:when>
   <c:when test="${param.status=='student'}">
     You are a student member
   </c:when>
</c:choose>

5.遍历行为

      当无需要无数次地遍历一个对象集合时,遍历行为就很有帮助。JSTL提供了forEach和forTokens两个执行遍历行为的标签:
(1)forEach标签
      forEach标签会无数次地反复遍历body content或者对象集合。可以被遍历的对象包括java.util.Collection和java.util.Map的所有实现,以及对象数组或者主类型。也可以遍历java.util.Iterator和java.util.Enumeration。forEach标签的语法有两种形式。第一种形式是固定次数地重复body content:

<c:forEach [var="varName"] begin="begin" end="end" step="step">
   body content
</c:forEach>

      第二种形式用于遍历对象集合

<c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [begin="begin"] [step="step"]>
   body content
</c:forEach>

      froEach标签的属性:

  • var:字符串类型,引用遍历的当前项目的有界变量名称。
  • items:支持的任意类型,遍历的对象集合。
  • begin:整数。
  • end:整数。
  • step:大于或者等于1的整数。

例如,下面的forEach标签将显示“1,2,3,4,5”。

<c:forEach var="x" begin="1" end="5">
  <c:out value="${x}"/>
</c:forEach>

6.函数

      JSTL定义了一套可以在EL表达式中使用的标准函数。这些函数都集中放在function标签库中。为了使用这些函数,必须在JSP的最前面使用以下taglib指令:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

调用函数时,要以下列各式使用一个EL:

${fn:functionName}
functionName是函数名。

      大部分函数都用于字符串刀座。例如,length函数用于字符串和集合。这里介绍几个比较常用的函数。
(1)contains函数
      contains函数用于测试一个字符串中是否包含指定的子字符串。如果字符串中包含该子字符串,则返回值为True,否则,返回False。其语法如下:
contains(string,substring);
例如,下面的EL表达式会返回True;

<c:set var="myString" value="Hello World"/>
${fn:contains(myString,"Hello")}

(2)join函数
      join函数将一个String数组中的所有元素都合并成一个字符串,并用指定的分隔符分开,其语法如下:
join(array,separator)
如果这个数组为null,就会返回一个空字符串。
例如,如果myArray是一个String数组,它带有两个元素“my”和“World”,那么,下列EL表达式:
${fn:join(myArray,",")}
将返回“my,world”。
(3)length函数
      length函数用于返回集合中的项目数,或者字符串中的字符数,其语法如下:
length(input)
(4)split函数
      split函数用于将一个字符串分离成一个子字符串数组。它的作用和join相反。例如,下列代码是分离字符串“my,world”,并将结果保存在有界变量split中。随后,利用forEach标签将split格式化成一个HTML表:

<c:set var="split" value='$(fn:split("my,world",",")}'/>
 <table>
 <c:forEach var="substring" items="$(split)">
 <tr><td>${substring}</td></tr>
 </c:forEach>
 </table>
 结果为:
 <table>
 <tr><td>my</td></tr>
 <tr><td>world</td></tr>
 </table>

猜你喜欢

转载自blog.csdn.net/Achenming1314/article/details/105988283