最近開發一個網站,經常使用JSTL,這種語法與以前的不同,開始用着非常吃力,今天總結一下,供大家參考。
一、前言
JSTL全名為JavaServer Pages Standard Tag Library,JSTL是由JCP(Java Community Process)所制定的標准規范,它主要提供給Java Web開發人員一個標准通用的標簽函數庫。
二、導入使用
2.1 在pom.xml里面添加jar包
<!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
2.2 在jsp文件頭添加說明
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
2.3 添加文件夾
在相目\WEB-INF\tld\文件夾中放入常用的tld文件:c.tld,fmt.tld
三、核心標簽庫
JSTL 核心標簽庫(C標簽)標簽共有13個,功能上分為4類:
- 表達式控制標簽:out、set、remove、catch
- 流程控制標簽:if、choose、when、otherwise
- 循環標簽:forEach、forTokens
- URL操作標簽:import、url、redirect
3.1 <c:forEach> 標簽
為循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍。
3.1.1 <c:forEach> 標簽的語法:
3.1.1.1 基本語法
迭代一集合對象之所有成員
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> 本體內容 </c:forEach>
迭代指定的次數
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> 本體內容 </c:forEach>
3.1.1.2 事例:
普通事例:
<c:forEach items="${compareShowDto.tgtColumnMetaDataList}" var="item"> <th>${item.name}</th> </c:forEach>
嵌套foreach事例:
<c:forEach items="${compareShowDto.compareColumnMetaData}" var="rows"> <tr <c:if test="${rows.theSame=='false'}"> style="color:red" </c:if>> <td style="background-color: #f5f5f5">${rows.theSame}</td> <c:forEach items="${rows.srcRowData.columnObjects}" var="item"> <td><c:out value="${item}"/></td> </c:forEach> <td style="background-color: #ff7800;"></td> <c:forEach items="${rows.tgtRowData.columnObjects}" var="item"> <td><c:out value="${item}"/></td> </c:forEach> </tr> </c:forEach>
3.1.1.3 <c:forEach> 標簽的 屬性說明 :
3.1.1.4 <c:forEach> 標簽的 屬性 : varStatus屬性: 它的提供另外四個屬性:index,count,fist和last,它們個自的意義如下:
屬性 類型 意義
index number 現在指到成員的索引
count number 總共指到成員的總和
first boolean 現在指到成員是否為第一個
last boolean 現在指到成員是否為最后一個
<c:forEach> 遍歷 List列表:
對於一個基本類型的數組,當前元素將作為相應包裝類(Integer、Float等等)的一個實例提供。
<c:forEach items="${domainList }" var="item"> <tr> <td align="center" valign="middle">${item["domain"]==null?" ":item["domain"]}</td> <td align="center" valign="middle"><fmt:formatDate value="${item['bind_date']}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td align="center" valign="middle"> <c:if test="${item['domain']!=null}"> <a href="javascript:;" id="${item['domain']}" class="del"> </a> </c:if> </td> </tr> </c:forEach>
<c:forEach> 遍歷Map:
對於一個java.util.Map,當前元素則作為一個java.util.Map.Entry提供。
<c:if test="${!empty permissionMap}"> <c:forEach items="${permissionMap}" var="item"> <tr> <td>${item.value.id}</td> <td>${item.value.urlOnClass}</td> <td>${item.value.urlOnMethod}</td> </tr> </c:forEach> </c:if>