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即可)
2.JSTL分類
根據JSTL标簽所提供的功能,可以将其分為5個類别。
- c(core) 核心标簽庫
- fmt 格式化(國際化)
- fn 函數 (JSTL提供的EL函數)
- xml 5.用來操作xml,已經不使用
- Sql 用來操作資料庫,已經不使用
建立jsp,使用taglib指令引入标簽庫:
3. 核心标簽庫★★★★★
使用标簽庫的步驟:
- 0.導入jar包
- 1.引入标簽庫
uri: 引入的标簽的位址
prefix: 給标簽起個别名
3.1.if ★★★★★
格式:
<c:if test="${ EL表達式 }">
html内容
</c:if>
test屬性表示要判斷的條件,當條件成立時,輸出标簽中的内容
<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>标簽的屬性說明:
1.完成固定次數的循環
2.循環集合:優化商品清單的展示
goods.jsp
将jstl的jar包導入到昨天的項目中
在goods.jsp中引入核心标簽庫
<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/>