天天看點

JSTL-Core标簽庫JSTL 标簽庫介紹    

JSTL 标簽庫介紹    

在 JSTL1.1 中有以下這些标簽庫是被支援的: Core 标簽庫、 XML processing 标簽庫、 I18N formatting 标簽庫、 Database access 标簽庫、 Functions 标簽庫。對應的辨別符見表 9.2 所示:

下面看例 9.5 ,簡單使用标簽庫的示例。

例 9.5 :簡單 JSTL 标簽庫示例

<%@ page contentType="text/html; charset=UTF-8"%>

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <body>

    <c:forEach var="i" begin="1" end="10" step="1">

      ${i}

      <br />

    </c:forEach>

  </body>

</html>

在該示例的 JSP 頁面中聲明了将使用 Core 标簽庫,它的 URI 為“ http://java.sun.com/jsp/jstl/core ”,字首為“ c ”。之後,頁面中 <c:forEach> 标簽就是使用了 JSTL 的标簽進行了工作。對于該标簽的功能,這裡暫時不作具體講解,隻是讓讀者能夠有個簡單的概念,了解怎樣定義和使用标簽庫。

JSTL Core 标簽庫

Core 标簽庫,又被稱為核心标簽庫,該标簽庫的工作是對于 JSP 頁面一般處理的封裝。在該标簽庫中的标簽一共有 14 個,被分為了四類,分别是:

q         多用途核心标簽: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch> 。

q         條件控制标簽: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise> 。

q         循環控制标簽: <c:forEach> 、 <c:forTokens> 。

q         URL 相關标簽: <c:import> 、 <c:url> 、 <c:redirect> 、 <c:param> 。

以下是各個标簽的用途和屬性以及簡單示例。

9.3.1  用于顯示的 <c:out> 标簽 (重要)

<c:out> 标簽是一個最常用的标簽,用于在 JSP 中顯示資料。它的屬性和描述如表 9.3 所示:

表 9.3   <c:out> 标簽屬性和說明

屬性 描述
value 輸出到頁面的資料,可以是 EL 表達式或常量(必須)
default 當 value 為 null 時顯示的資料(可選)
escapeXml 當設定為 true 時會主動更換特殊字元,比如“ &lt;,&gt;,&amp; ”(可選,預設為 true )

在 JSTL1.0 的時候,在頁面顯示資料必須使用 <c:out> 來進行。然而,在 JSTL1.1 中,由于 JSP2.0 規範已經預設支援了 EL 表達式 ,是以可以直接在 JSP 頁面使用表達式。下面看一個示例。

<c:out value="${sessionScope.anyValue}" default="no value" escapeXml="false"/>

該示例将從 Session 查找名為“ anyValue ”的參數,并顯示在頁面,若沒有找到則顯示“ no value ”。

9.3.2  用于指派的 <c:set> 标簽(重要)

<c:set> 标簽用于為變量或 JavaBean 中的變量屬性指派的工作。它的屬性和描述如表 9.4 所示:

表 9.4   <c:set> 标簽屬性和說明

屬性 描述
value 值的資訊,可以是 EL 表達式或常量
target 被指派的 JavaBean 執行個體的名稱,若存在該屬性則必須存在 property 屬性(可選)
property JavaBean 執行個體的變量屬性名稱(可選)
var 被指派的變量名(可選)
scope 變量的作用範圍,若沒有指定,預設為 page (可選)

當不存在 value 的屬性時,将以包含在标簽内的實體資料作為指派的内容。下面看一個示例:

<c:set value="this is andy" var="oneString"/>

${oneString} <br>

該示例将為名為“ oneString ”的變量指派為“ this is andy ”,其作用範圍為 page 。

9.3.3  用于删除的 <c:remove> 标簽

<c:remove> 标簽用于删除存在于 scope 中的變量。它的屬性和描述如表 9.5 所示:

表 9.5   <c:remove> 标簽屬性和說明

屬性 描述
var 需要被删除的變量名
scope 變量的作用範圍,若沒有指定,預設為全部查找(可選)

下面看一個示例:

<c:remove var="sampleValue" scope="session"/>

${sessionScope.sampleValue} <br>

該示例将存在于 Session 中名為“ sampleValue ”的變量删除。下一句 EL 表達式顯示該變量時,該變量已經不存在了。

9.3.4  用于異常捕獲的 <c:catch> 标簽

<c:catch> 标簽允許在 JSP 頁面中捕捉異常。它包含一個 var 屬性,是一個描述異常的變量,改變量可選。若沒有 var 屬性的定義,那麼僅僅捕捉異常而不做任何事情,若定義了 var 屬性,則可以利用 var 所定義的異常變量進行判斷轉發到其他頁面或提示報錯資訊。看一個示例。

<c:catch var="err">

  ${param.sampleSingleValue[9] == 3}

</c:catch>

${err}

當“ ${param.sampleSingleValue[9] == 3} ”表達式有異常時,可以從 var 屬性“ err ”得到異常的内容,通常判斷“ err ”是否為 null 來決定錯誤資訊的提示。

   可以用struts中的全局exceptions替換

9.3.5  用于判斷的 <c:if> 标簽(常用)

<c:if> 标簽用于簡單的條件語句。它的屬性和描述如表 9.6 所示:

表 9.6   <c:if> 标簽屬性和說明

屬性 描述
test 需要判斷的條件
var 儲存判斷結果 true 或 false 的變量名,該變量可供之後的工作使用(可選)
scope 變量的作用範圍,若沒有指定,預設為儲存于 page 範圍中的變量(可選)

下面看一個示例:

<c:if test="${paramValues.sampleValue[2] == 12}" var="visits">

       It is 12

</c:if><br>

${visits} <br>

該示例将判斷 request 請求送出的傳入控件數組參數中,下标為“ 2 ”的控件内容是否為“ 12 ”,若為 12 則顯示“ It is 12 ”。判斷結果被儲存在 page 範圍中的“ visits ”變量中。  

9.3.6  用于複雜判斷的<c:choose>、<c:when>、<c:otherwise>标簽(重要)

這三個标簽用于實作複雜條件判斷語句,類似“ if,elseif ”的條件語句。

q         <c:choose> 标簽沒有屬性,可以被認為是父标簽, <c:when> 、 <c:otherwise> 将作為其子标簽來使用。

q         <c:when> 标簽等價于“ if ”語句,它包含一個 test 屬性,該屬性表示需要判斷的條件。

q         <c:otherwise> 标簽沒有屬性,它等價于“ else ”語句。

下面看一個複雜條件語句的示例。

<c:choose>

  <c:when test="${paramValues.sampleValue[2] == 11}">

         not 12 not 13,it is 11

  </c:when>

  <c:when test="${paramValues.sampleValue[2] == 12}">

         not 11 not 13,it is 12

  </c:when>

  <c:when test="${paramValues.sampleValue[2] == 13}">

         not 11 not 12,it is 13

  </c:when>

  <c:otherwise>

         not 11 、 12 、 13

  </c:otherwise>

</c:choose>

該示例将判斷 request 請求送出的傳入控件數組參數中,下标為“ 2 ”控件内容是否為“ 11 ”或“ 12 ”或“ 13 ”,并根據判斷結果顯示各自的語句,若都不是則顯示“ not 11 、 12 、 13 ”。

9.3.7  用于循環的<c:forEach>标簽

<c:forEach> 為循環控制标簽。它的屬性和描述如表 9.7 所示:

表 9.7   <c:forEach> 标簽屬性和說明

屬性 描述
items 進行循環的集合(可選)
begin 開始條件(可選)
end 結束條件(可選)
step 循環的步長,預設為 1 (可選)
var 做循環的對象變量名,若存在 items 屬性,則表示循環集合中對象的變量名(可選)
varStatus

顯示循環狀态的變量(可選)

current目前這次疊代的(集合中的)項

index目前這次疊代從 0 開始的疊代索引

count目前這次疊代從 1 開始的疊代計數

first用來表明目前這輪疊代是否為第一次疊代的标志

last用來表明目前這輪疊代是否為最後一次疊代的标志

下面看一個集合循環的示例。

<%ArrayList arrayList = new ArrayList();

         arrayList.add("aa");

         arrayList.add("bb");

         arrayList.add("cc");

%>

<%request.getSession().setAttribute("arrayList", arrayList);%>

<c:forEach items="${sessionScope.arrayList}" var="arrayListI">

  ${arrayListI}

</c:forEach>

該示例将儲存在 Session 中的名為“ arrayList ”的 ArrayList 類型集合參數中的對象依次讀取出來, items 屬性指向了 ArrayList 類型集合參數, var 屬性定義了一個新的變量來接收集合中的對象。最後直接通過 EL 表達式顯示在頁面上。下面看一個簡單循環的示例。

<c:forEach var="i" begin="1" end="10" step="1">

      ${i}<br />

</c:forEach>

該示例從“ 1 ”循環到“ 10 ”,并将循環中變量“ i ”顯示在頁面上。

9.3.8  用于分隔字元的<c:forTokens>标簽(重要)

<c:forTokens> 标簽可以根據某個分隔符分隔指定字元串,相當于 java.util.StringTokenizer 類。它的屬性和描述如表 9.8 所示:

表 9.8   <c:forTokens> 标簽 屬性和說明

屬性 描述
items 進行分隔的 EL 表達式或常量
delims 分隔符
begin 開始條件(可選)
end 結束條件(可選)
step 循環的步長,預設為 1 (可選)
var 做循環的對象變量名(可選)
varStatus 顯示循環狀态的變量(可選)

下面看一個示例。

<c:forTokens items="aa,bb,cc,dd" begin="0" end="2" step="2" delims="," var="aValue">

  ${aValue}

</c:forTokens>

需要分隔的字元串為“ aa,bb,cc,dd ”,分隔符為“ , ”。 begin 屬性 指定從第一個“ , ”開始分隔, end 屬性指定分隔到第三個“ , ”,并将做循環的變量名指定為“ aValue ”。由于步長為“ 2 ”,使用 EL 表達式 ${aValue} 隻能顯示“ aa

9.3.9  用于包含頁面的 <c:import>

<c:import> 标簽允許包含另一個 JSP 頁面到本頁面來。它的屬性和描述如表 9.9 所示:

表 9.9   <c:import> 标簽屬性和說明

屬性 描述
url 需要導入頁面的 URL
context Web Context 該屬性用于在不同的 Context 下導入頁面,當出現 context 屬性時,必須以“ / ”開頭,此時也需要 url 屬性以“ / ”開頭(可選)
charEncoding 導入頁面的字元集(可選)
var 可以定義導入文本的變量名(可選)
scope 導入文本的變量名作用範圍(可選)
varReader 接受文本的 java.io.Reader 類變量名(可選)

下面看一個示例。

<c:import url="/MyHtml.html" var="thisPage" />

<c:import url="/MyHtml.html" context=”/sample2” var="thisPage"/>

<c:import url="www.sample.com/MyHtml.html" var="thisPage"/>

該示例示範了三種不同的導入方法,第一種是在同一 Context 下的導入,第二種是在不同的 Context 下導入,第三種是導入任意一個 URL 。

9.3.10  用于得到 URL 位址的 <c:url> 标簽

<c:url> 标簽用于得到一個 URL 位址。它的屬性和描述如表 9.10 所示:

表 9.10  <c:url> 标簽屬性和說明

屬性 描述
value 頁面的 URL 位址
context Web Context 該屬性用于得到不同 Context 下的 URL 位址,當出現 context 屬性時,必須以“ / ”開頭,此時也需要 url 屬性以“ / ”開頭(可選)
charEncoding URL 的字元集(可選)
var 存儲 URL 的變量名(可選)
scope 變量名作用範圍(可選)

下面看一個示例:

<c:url value="/MyHtml.html" var="urlPage" />

<a href="${urlPage}" target="_blank" rel="external nofollow" >link</a>

得到了一個 URL 後,以 EL 表達式放入 <a> 标簽的 href 屬性,達到連結的目的。

9.3.11  用于頁面重定向的 <c:redirect> 标簽

<c:redirect> 用于頁面的重定向,該标簽的作用相當于 response.setRedirect 方法的工作。它包含 url 和 context 兩個屬性,屬性含義和 <C:url> 标簽相同。下面看一個示例。

<c:redirect url="/MyHtml.html"/>

該示例若出現在 JSP 中,則将重定向到目前 Web Context 下的“ MyHtml.html ”頁面,一般會與 <c:if> 等标簽一起使用。

9.3.12  用于包含傳遞參數的 <c:param> 标簽

<c:param> 用來為包含或重定向的頁面傳遞參數。它的屬性和描述如表 9.11 所示:

表 9.11   <c:param> 标簽屬性和說明

屬性 描述
name 傳遞的參數名
value 傳遞的參數值(可選)

下面是一個示例:

<c:redirect url="/MyHtml.jsp">

<c:param name="userName" value=”RW” />

</c:redirect>

該示例将為重定向的“ MyHtml.jsp ”傳遞指定參數“ userName=’RW’ ”。