大家好,歡迎來到樂位元組小樂的Java技術分享園地
回顧上篇内容:
樂位元組:JSP詳解|樂位元組zhuanlan.zhihu.com
一、簡介
Java Server Pages Standard Tag Libray(JSTL):JSP 标準标簽庫,是一個定制标簽類庫的集合,用于解決一些常見的問題,例如疊代一個映射或者集合、條件測試、XML 處理,甚至資料庫和通路資料庫操作等。
我們現在隻讨論 JSTL 中最重要的标簽,疊代集合以及格式化數字和日期幾個标簽。
核心标簽庫:http://java.sun.com/jsp/jstl/core 包含 Web 應用的常見工作,比如:循環、表達式指派、基本輸入輸出等。
格式化标簽庫:http://java.sun.com/jsp/jstl/fmt 用來格式化顯示資料的工作,比如:對不同區域的日期格式化等。
為了在 JSP 頁面使用 JSTL 類庫,必須以下列格式使用 taglib 指令:
<%@taglib uri=”” prefix=””%>
例如:<%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
字首可以是任意内容,遵循規範可以使團隊中由不同人員編寫的代碼更加相似;是以,建議使用事先設計好的字首。此時需要導入兩個jar 包
直接放入 Tomcat 的 lib 目錄下即可。
二、标簽的使用
1. 條件動作标簽
條件動作指令用于處理頁面的輸出結果依賴于某些輸入值的情況,在 Java 中是利用 if、 if…else 和 switch 語句來進行處理的。在 JSTL 中也有 4 個标簽可以執行條件式動作指令:if、 choose、when 和 otherwise。
1) if 标簽
if 标簽先對某個條件進行測試,如果該條件運算結果為 true, 則處理它的主體内容,測試結果儲存在一個 Boolean 對象中,并建立一個限域變量來引用 Boolean 對象。可以利用 var 屬性設定限域變量名,利用 scope 屬性來指定其作用範圍。
if 的文法有兩種形式:沒有主體内容、有主體内容
沒有主體内容該情況下:var 指定的限域變量由同一個 JSP 頁面中後面的标簽測試所決定。
有主體内容主體内容為 JSP,若測試條件為 true,則處理 JSP。
JSTL中沒有else标簽,為了模拟 else 的情景,需要使用兩個 if 标簽,并且這兩個标簽為
相反的條件。
2) choose、when 和 otherwise 标簽
choose 和 when 标簽的作用與 Java 中的 switch 和 case 關鍵字相似。也就是說:他們為互相排斥的條件式執行提供相關内容。choose 标簽内容部必須嵌有一個或多個 when 标簽, 每個 when 标簽代表可以進行運算和處理的一種情況。otherwise 标簽用于預設的條件代碼 塊,如果所有的 when 标簽的測試條件運算結果都不為 true,就會執行該代碼塊。如果有 otherwise 标簽,它必須放在最後一個 when 标簽之後,否則會報錯。
choose 和 otherwise 标簽沒有屬性,when 标簽則必須使用 test 屬性設定一個條件,用于确定是否處理主體内容。
注意:
2. 疊代标簽
forEach 标簽
forEach 是将一個主體内容疊代多次,或者疊代一個對象集合。可以疊代的對象包括所 有的 java.util.Collection 和 java.util.Map 接口的實作,以及對象或者基本類型的數組。他還可 以疊代 java.util.Iterator 和 java.util.Enumeration,但不能在多個動作指令中使用 Iterator 或者 Enumeration,因為 Iterator 或者 Enumeration 都不能重置(reset)。 各屬性含義如下:
varStatus 屬性的使用:
forEach 的文法有兩種形式:
将 body 内容重複一定的次數: 用于疊代一個對象集合:<%
List list = new ArrayList();
for (int i = 0; i < 10; i++) {
list.add("A:" + i);
}
pageContext.setAttribute("li", list);
%>
<table>
<tr>
<td>List内容</td>
<td>目前下标</td>
<td>成員總數</td>
<td>是/否first成員</td>
<td>是/否為last成員</td>
</tr>
<c:forEach items="${li}" var="item" begin="0" end="9" varStatus="idx">
<tr>
<td><b>${item}</b></td>
<td>${idx.index}</td>
<td>${idx.count }</td>
<td>${idx.first }</td>
<td>${idx.last}<br /></td>
</tr>
</c:forEach>
</table>
内容主體為 JSP,對于每一次疊代,forEach 标簽都會建立一個限域變量,其名稱通過 var 屬性設定。利用 forEach 疊代一個 Map,分别利用 key 和 value 屬性引用一個 Map 鍵和一個 Map 值。
<%
Map map = new HashMap();
map.put("map1", "shsxt");
map.put("map2", "bjsxt");
map.put("map3", "sxt");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map}" var="myMap">
${myMap.key}:
${myMap.value}<br />
</c:forEach>
3. 格式化動作指令
JSTL 提供了格式化和解析數字和日期的标簽,我們讨論裡面有:formatNumber、formatDate、parseNumber及parseDate。
1) formatNumber 标簽
matNumber 标簽 該标簽用指定的格式或精度來格式化數字,<fmt:formatNumber>标簽有如下屬性: 使用該标簽時,有兩種文法:
沒有主體内容 有主體内容3) formatDate 标簽
使用指定的風格或模式格式化日期和時間,<fmt:formatDate>标簽有如下屬性:
pattern 屬性指定更精确的處理日期:
4) parseNumber 标簽
利用 parseNumber 标簽可以将數字、貨币或百分比的字元串表示法解析成指定語言環 境的數字。即解析一個代表着數字,貨币或百分比的字元串。兩種文法形式:
沒有主體内容 使用主體内容<fmt:parseNumber>标簽有如下屬性
5) parseDate 标簽
此标簽為指定區域解析日期和時間的字元串表示法。即解析一個代表着日期或時間的字 符串。兩種形式:
沒有主體内容 使用主體内容<fmt:parseDate>标簽有如下屬性
除此之外還有許多其他标簽,使用的時候查閱即可。
感謝閱讀樂位元組技術文章,請繼續關注樂位元組或添加君羊:五989六069八,更多Java技術文章奉上,下次小樂将為大家帶來json的詳細講解!