天天看點

JavaWeb開發專題(十三)-JSTL标簽庫

1.JSTL簡介

  • JSTL:JavaServer Pages Standard Tag Library,JSP标準标簽庫是一個不斷完善的開放源代碼的JSP标簽庫,是由apache的jakarta小組來維護的。
  • JSTL支援通用的、結構化的任務,比如疊代,條件判斷,XML文檔操作,國際化标簽,SQL标簽。 除了這些,它還提供了一個架構來使用內建JSTL的自定義标簽。
  • 下載下傳jakarta-taglibs-standard-1.1.2.zip 包并解壓,将jakarta-taglibs-standard-1.1.2/lib/下的兩個jar檔案:standard.jar和jstl.jar檔案拷貝到/WEB-INF/lib/下。(1.2版本,隻需要jstl.jar即可)
    JavaWeb開發專題(十三)-JSTL标簽庫
    JavaWeb開發專題(十三)-JSTL标簽庫

2.JSTL分類

根據JSTL标簽所提供的功能,可以将其分為5個類别。

  • c(core) 核心标簽庫
  • fmt 格式化(國際化)
  • fn 函數 (JSTL提供的EL函數)
  • xml 5.用來操作xml,已經不使用
  • Sql 用來操作資料庫,已經不使用

建立jsp,使用taglib指令引入标簽庫:

JavaWeb開發專題(十三)-JSTL标簽庫

3. 核心标簽庫★★★★★

使用标簽庫的步驟:

  • 0.導入jar包
    JavaWeb開發專題(十三)-JSTL标簽庫
  • 1.引入标簽庫
    JavaWeb開發專題(十三)-JSTL标簽庫

    uri: 引入的标簽的位址

    prefix: 給标簽起個别名

    JavaWeb開發專題(十三)-JSTL标簽庫

3.1.if ★★★★★

格式:

<c:if test="${ EL表達式 }">
  html内容
</c:if>      

test屬性表示要判斷的條件,當條件成立時,輸出标簽中的内容

JavaWeb開發專題(十三)-JSTL标簽庫
<c:if test="${ empty loginUser }">
  沒有登入
</c:if>
<c:if test="${ not empty loginUser }">
  歡迎你,${ loginUser.nickname }
</c:if>      

使用腳本完成判斷進行标簽的輸出,比較繁瑣

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
  <!-- 在session中儲存一個變量,模拟登入 -->
  <!-- 在某個作用域中儲存一個資料 -->
  <c:set var="loginUser" value="user" scope="session" />
  <!-- 
    test: 條件表達式,傳回boolean類型
    var: 将條件表達式的結果儲存到一個作用域中,預設page域
    scope: 将test中的結果儲存到哪個作用域:page|request|session|application
  -->
  <c:if test="${ loginUser != null }" var="isLogin" scope="page">
    歡迎您,xxxx
  </c:if>
  <c:if test="${ !isLogin }">
    沒有登入
  </c:if>
</body>
</html>      

3.2.forEach ★★★★★

一般格式:

<c:forEach  items="${ 集合對應key }"  var="别名"  varStatus="sta">
  ${ 别名.屬性名 }
  擷取目前循環的對象對應的索引:${ sta.index }  可以用來判斷奇偶數
</c:forEach>      

<c:forEach>标簽的屬性說明:

JavaWeb開發專題(十三)-JSTL标簽庫

1.完成固定次數的循環

JavaWeb開發專題(十三)-JSTL标簽庫
JavaWeb開發專題(十三)-JSTL标簽庫

2.循環集合:優化商品清單的展示

goods.jsp

将jstl的jar包導入到昨天的項目中

JavaWeb開發專題(十三)-JSTL标簽庫

在goods.jsp中引入核心标簽庫

JavaWeb開發專題(十三)-JSTL标簽庫
<table cellspacing="0" cellpadding="1" rules="all"
  bordercolor="gray" border="1" width="100%">
  <tr>
    <td class="ta_01" align="center" bgcolor="#afd1f3" colspan="8">
      <div style="float:left;"><strong>商品清單</strong></div>
      <div style="float:right;">
        <input id="add" type="button" value="添加" />
      </div>
    </td>
  </tr>
  <tr style="font-weight: bold; font-size: 12pt; height: 25px; background-color: #afd1f3">
    <td align="center" width="5%">序号</td>
    <td align="center" width="17%">商品圖檔</td>
    <td align="center" width="17%">商品名稱</td>
    <td align="center" width="17%">市場價</td>
    <td align="center" width="17%">商城價</td>
    <td align="center" width="17%">是否熱門</td>
    <td width="7%" align="center">編輯</td>
    <td width="7%" align="center">删除</td>
  </tr>
  <!-- goods是一個自定義屬性,jQuery根據其進行查找這些tr元素 -->
  <c:forEach items="${ gList }" var="g" varStatus="sta">
  <tr goods style="background-color: ${sta.index % 2 == 1 ? '#ffffff' : '#f1f1f1'}">
    <td style="height: 22px" align="center">${ sta.count }</td>
    <td style="height: 22px" align="center">
      <img src="${g.imgurl }" width="30px" />
    </td>
    <td style="height: 22px" align="center">${g.name }</td>
    <td style="height: 22px" align="center">${g.marketprice}</td>
    <td style="height: 22px" align="center">${g.estoreprice }</td>
    <td style="height: 22px" align="center">${g.ishot eq 1 ? "熱門" : "不熱門"}</td>
    <td align="center">
      <a href="goods_update.jsp">
        <img src="images/i_edit.gif" border="0" style="cursor: hand">
      </a>
    </td>
    <td align="center">
      <a href="#">
        <img src="images/i_del.gif" border="0" style="cursor: hand">
      </a>
    </td>
  </tr>
  </c:forEach>
</table>      

3.3.set

<!-- set标簽的用法 -->
<!-- 用法1:在某個作用域中設定一個變量
  var:聲明的變量名
  value:變量的值
  scope:變量儲存到哪個作用域,預設是page域
 -->
<c:set var="path" value="${pageContext.request.contextPath }" />
path=${path }<br/>
<a href="${path}/index.jsp">首頁</a>
<a href="${path}/index.jsp">首頁</a>
<a href="${path}/index.jsp">首頁</a>

<!-- 用法2:修改某個對象中的屬性 -->
<%
  Goods g = new Goods();
  g.setName("電腦");
  request.setAttribute("goods", g);
%>
<c:set target="${ goods }" property="name" value="筆記本" />
${ goods.name }      

3.4.其他标簽介紹

<c:choose>
  <c:when test="${ 表達式 }">
    ...
  </c:when>
  <c:when test="${ 表達式 }">
    ...
  </c:when>
  <c:when test="${ 表達式 }">
    ...
  </c:when>
  <c:otherwise>
    ...
</c:otherwise>
</c:choose>
相當于
if (xxx) {
} else if() {
} else if() {
} else {
}      

4.格式化标簽庫(擴充内容)

<%@ page import="java.util.Date"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<!-- 格式化日期 -->
<%
  request.setAttribute("date", new Date());
  request.setAttribute("num", 123456.789);
%>
格式化前:${date }<br/>
<!-- 24小時制 -->
格式化後:<fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss" /><br/>
<!-- 12小時制 -->
格式化後:<fmt:formatDate value="${date }" pattern="yyyy-MM-dd hh:mm:ss" /><br/>
<!-- 不足10,不補0 -->
格式化後:<fmt:formatDate value="${date }" pattern="yy-M-d h:m:s" /><br/>
<hr/>
格式化前:${ num }<br/>
<!-- 
pattern中,小數點前用#,之後用0表示保留的小數點位數,格式化時會進行四舍五入
 -->
格式化後:<fmt:formatNumber value="${ num }" pattern="#.00" /><br/>
<!-- 1,234,567.89 -->
格式化後:<fmt:formatNumber value="${ 1234567.89 }" pattern="#,###.00" /><br/>
格式化後:<fmt:formatNumber value="${ num - 0.005 }" pattern="#.00" />
</body>
</html>      

5.函數庫(擴充内容)

${fn:contains("abc", "b") }<br/>
${fn:contains("abc", "B") }<br/>
${fn:containsIgnoreCase("abc", "B") }<br/>
${ "<a href='#'>我是a</a>" }<br/>
${fn:escapeXml("<a href='#'>我是a</a>") }<br/>
<%
  String[] arr = {"1", "2", "3"};
  pageContext.setAttribute("arr", arr);
%>
${fn:join(arr, "a") }<br/>
${fn:length(arr) }<br/>
${fn:split("1,2,3", ",")[1] }<br/>
${fn:substringAfter("abccdcef", "c") }<br/>
1${fn:trim("  aaa  ") }1<br/>