最近沒什麼項目,部門經理開會讓我們複習學習EE的知識,每個人分一部分自行研究總結,今天總結了一下JSTL標籤的使用,方便以後工作中用到時複習使用。
一、爲什麼要使用JSTL
在JSP中,EL表達式是個很方便的工具,但是EL表達式功能很有限制(例如不能遍歷集合等),JSTL作爲最基本的標籤庫,JSTL庫中提供了一系列的JSP標籤,實現了最基本的功能,例如集合的遍歷、數據的輸出、字符串的處理、數據的格式化等。
二、JSTL的構成
JSTL包括core、fnt、sql、XML等4個標籤庫,以及一個fn方法庫。在Java EE 1.4之前,JSP中使用JSTL需要添加JSTL的類庫,從Java EE 5開始,內置JSTL的支持,可以直接使用。
三、JSTL的core標籤庫
Core標籤庫是JSTL的核心標籤庫,或者說是基本標籤庫,實現了最基本的功能。在使用core標籤庫下的標籤時,需要在JSP文件中引入標籤庫,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>。
以下爲core標籤庫下各主要標籤的使用介紹:
1、<c:out/>標籤:JSTL中使用out標籤輸出數據。
<c:out value=”${param.action}”></c:out>
注:out標籤還有另外兩個屬性:default與escapeXml。如果value屬性的值不存在,會輸出default屬性的值。如果excapeXml爲true,則會對輸出的內容進行XML編碼。
2、<c:if/>標籤條件判斷的標籤,判斷條件寫在test屬性中。
<c:if test=”${param.action == “add”}”>
……..
</c:if>
<c:if test=”${param.action == “edit”}”>
……..
</c:if>
3、<c:choose/>、<c:when/>、<c:otherwise>標籤
<c:choose>
<c:when test=”${param.aciton}”>
When標籤輸出
</c:when>
<c:otherwise>
Otherwise標籤輸出
</c:otherwise>
</c:choose>
4、<c:forEach/>標籤爲循環標籤,items屬性裏是集合類對象或者是數組。
顯示偶數:
<c:forEach var=”num” begin=”2” end=”100” step=”2”>
<div>${num}</div>
</c:forEach>
遍歷List:
<c:forEach istem=”${personList}” var=”person”>
<tr>
<td>${person.id}</td>
<td>${person.name}</td>
<td>${person.age}</td>
<td>${person.sex}</td>
<td>${person.city}</td>
<td>${person.birthday}</td>
</tr>
</c:forEach>
遍歷Map對象:
<c:forEach var=”item” items=”${header}”>
<tr>
<td>${item.key}</td>
<td>${item.value}</td>
</tr>
</c:forEach>
<c:forEach>標籤的varStatus屬性可以實現隔行變色的功能。如下:
<c:forEach item=”${persoinList}” vae=”person” varStatus=”varStatus”>
<tr bgcolor=”${varStatus.index % 2 == 1 ? ‘#EFEFEF’ : ‘#FFFFFF’}”>
<td>${varStatus.current.id}</td>
…………
</tr>
</c:forEach>
注:varStatus的屬性:index、count、fist、last、current、begin、end、step。
5、<c:forTokens/>標籤爲循環標籤,items屬性裏面是字符串,會被delims屬性分割成多個字符串,forTokens就是遍歷這些字符串。
<c:forTokens items=”Jane,Tomi,Andy,Hedrix,McCarteny,Lenno,Court,Ben” delims=”,” var=”item” varStatus=”varStatus” begin=”1” end=”7” step=”2”>
<tr>
<td>${varStatus.index}</td>
<td>${item}</td>
</tr>
</c:forTokens>
6、<c:set/>實現計數器,set標籤既可以聲明一個不存在的對象,也可以修改一個已經存在的對象,還可以只修改該對象的某個屬性,前提是該屬性是可寫的(即有對應的setter方法)
<c:set var=”totalCount” value=”${totalCount + 1}” scope=”application”></c:set>
<c:set var=”count” value=”${count + 1}” scope=”session”></c:set>
本網站總訪問人數:${totalCount} <br/>
其中您的訪問次數:${count} <br/>
注:target作用類似於var,不同的是target只能用來操作Java Bean或者Map,target只能修改已存在的Java Bean的屬性或者Map的內容,而不能創建,因此如果target爲null,會拋出異常。Target與var二者不能同時使用。
7、<c:remove/>標籤與set標籤作用正好相反。可以從page、request、session、application等刪除所有類型的數據。
<% request.setAttribute(“somemap”, new HashMap()); %>
<c:remove var=”somemap” />
${somemap == null ? ‘somemap 已經被刪除’ : ‘somemap 沒有被刪除’}
8、<c:catch/>捕捉異常
<c:catch var=”e”>
<c:set target=”someBean” property=”someProperty” value=”Some Value”>
</c:set>
</c:catch>
<c:if test=”${e != null}”>
程序拋出了異常${e.class.name},原因:${e.message}
</c:if>
9、<c:import/>導入網絡資源
<c:import var=”baidu” url=”http://www.baidu.com” charEncoding=”gbk” cope=”request”/>
Baidu的源代碼爲:<br/><br/>
<c:out value=”${ baidu}” escapeXml=”true”></c:out>
10、<c:url/>標籤,JSP中,如果客戶瀏覽器不支持Cookie,則可以使用request.encodeURL()方法對URL進行編碼,使該客戶也能使用Session功能,這叫做URL重寫。url標籤的作用就是實現類似功能。
<c:url value=”/images/bg.gif”>
11、<c:redirect/>標籤用於實現Redirect重定向功能。
<c:redirect url=”http://www.baidu.com” ></c:redirect>
12、<c:param/>標籤,有時候重定向到頁面需要參數,這時候可以配合param標籤一塊使用。Param標籤專門用於設置參數。
<c:redirect url=”http://www.baidu.com” >
<c:param name=”wd” value=”音樂”></c:param>
<c:param name=”cl” value=”3”></c:param>
</c:redirect>
四、JSTL的fnt標籤庫
Fnt的標籤爲輔助性功能標籤。Fnt英文全稱爲format。在使用fnt標籤庫下的標籤時,需要在JSP文件中引入標籤庫,如:<%@ taglib uri=”http://java.sun.com/jsp/jstl/fnt” prefix=”fnt”%>。
以下爲fnt標籤庫下各主要標籤的使用介紹:
1、<fnt:requestEncoding/>設置編碼
<fmt:requestEncoding value=”UTF-8” />
2、<fmt:setLocale/>顯示所有地區的數據格式,用於設定Locale。
<fmt:setLocale value=”${locale}”/>
3、<fmt:timeZone/>顯示全球時間,Locale只是影響到時間的格式,TimeZone會影響到時間的值,timeZone標籤只對標籤內的代碼有效。
<fmt:timeZone value=”Asia/Shanghai”>
中間爲timeZone標籤生效的作用域
</fmt:timeZone>
4、<fmt:setTimeZone>設置時區,如果需要設置全局的Time Zone,需要使用setTimeZon標籤。
5、<fmt:bundle/>、<fmt:message/>、<fmt:param/>資源國際化
Java中使用ResourceBundle類解決i18n(國際化)的問題,把所有的中文提示都放在messages_zh_CN.properties文件中。JSTL提供了bundle標籤,message標籤與param標籤來實現該功能。
<fmt:bundle basename=”messages”>
<fmt:message key=”prompt.hello”>
<fmt:param value=”yiyu986”></fmt:param>
</fmt:message> <br/>
<fmt:message key=”prompt.greeting”></fmt:message>
</fmt:bundle>
6、<fmt:setBundle/>標籤,bundle標籤只對標籤內部的message標籤有效,而setBundle標籤對所有的message標籤有效。
<fmt:setBundle basename=”message” var=”resource” scope=”request”/>
<fmt:message bundle=”{resource}” key=”prompt.hello”>
<fmt:param>yiyu986</fmt:param>
</fmt:message>
<fmt:message bundle=”${resource}” key=”prompt.greeting”></fmt:message>
7、<fmt:formatNumber/>顯示不同地區的各種數據格式,formatNumber標籤能夠根據不同的Locale輸出不同的格式。
8、<fmt:parseNumber/>解析數字,parseNumber標籤與formatNumber標籤功能剛好相反,formatNumber把數字轉爲字符串,parseNumber標籤把字符串轉爲數字。
<fmt:parseNumber value=”1,000”></fmt:parseNumber> <br/>
<fmt:parseNumber value=”1,000” parseLocale=”de”></fmt:parseNumber> </br>
9、<fmt:formatDate/>格式化日期,用於將日期格式化爲指定格式的字符串。
<jsp:useBean id=”currDate” class=”java.util.Date”></jsp:useBean>
<fmt:formatDate value=”${currDate}” />
<fmt:formatDate value=”${currDate}” pattern=”yyyy/MM/dd HH:mm:ss:sss”>
</fmt:formatDate>
10、<fmt:parseDate/>解析日期,將字符串轉化爲時間
<fmt:parseDate value=”2008-12-12”></fmt:parseDate>