1.條件標籤java
條件標籤可以實現Java語言中的if語句以及if-else語句的功能,它包括如下幾種:數組
<c:if>:用於實現Java語言中的if語句的功能。session
<c:choose>、<c:when>、<c:otherwise>:用於實現Java語言中if-else語句的功能。app
(1)<c:if>標籤jsp
<c:if>標籤用於實現Java語言中的if語句的功能,它的語法爲:oop
<c:if test="邏輯表達式" var="表明邏輯表達式的值的命名變量的名字"索引
scope= "{page|request|session|application}" />接口
</c:if>rem
<c:if>標籤會把邏輯表達式的值存放在var屬性指定的命名變量中,scope屬性則指定命名變量的範圍,scope屬性的默認值是page。字符串
例如如下<c:if>標籤先判斷username請求參數的值是否爲Tom,而後把判斷結果做爲result命名變量存放在請求範圍內:
<c:if test="${param.username==’Tom’}"
var = "result" scope="request" />
${result}
</c:if>
以上<c:if>標籤等價於如下Java程序片斷:
<%
String username = request.getParamaeter("username");
if(username!=null &&"Tom".equals(username)){
request.setAttribute("result",true);
}else{
reuqest.setAttribute("result",false);
}
%>
<c:if>標籤還能夠包含標籤主體,只有當邏輯表達式的值爲true時,纔會執行標籤主體。例如:
<c:if test=${param.save==’user’}" >
Saving user
<c:set var="user" value="Tom" />
</c:if>
以上<c:if>標籤等價於如下Java程序片斷:
<%
String save=request.getParameter("save");
if(save!=null && "user".equals(save)){
out.print("Saving user");
pageContext.setAttribute("user","Tom");
}
%>
(2)<c:choose>、<c:when>、<c:otherwise>標籤
<c:choose>、<c:when>、<c:otherwise>標籤在一塊兒連用,能夠實現Java語言中的if-else語句的功能。例如以下代碼根據username請求參數的值來打印不一樣的結果:
<c:choose>
<c:when test="${empty param.username}">
UnKnown user;
</c:when>
<c:when test="${param.username==’Tom’}">
${param.username} is manager.
</c:when>
<c:otherwise>
${param.username} is employee.
</c:otherwise>
</c:choose>
以上標籤等價於如下Java程序片斷:
<%
String username=request.getParameter("username");
if(username==null){
out.print("UnKnown user.");
}else{
out.print(username + "is manager.");
}else{
out.print(username + "is employee.");
}
%>
<c:choose>、<c:when>、<c:otherwise>標籤的使用必須符合如下語法規則:
<c:when>和<c:otherwise>不能單獨使用,它們必須位於<c:choose>父標籤中。
在<c:choose>標籤中能夠包含一個或多個<c:when>標籤。
在<c:choose>標籤中能夠不包含<c:otherwise>標籤。
在<c:choose>標籤中若是同時包含<c:when>和<c:otherwise>標籤,那麼<c:otherwise>必須位於<c:when>標籤以後。
2.<c:forEach>標籤
(1)<c:forEach>標籤的基本語法爲:
<c:forEach var="表明集合中的一個元素的命名變量的名字" items="集合">
標籤主體
</c:forEach>
<c:forEach>標籤每次從集合中取出一個元素,而且把它存放在NESTED範圍內的命名變量中,在標籤主體中能夠訪問這個命名變量。NESTED範圍是指當前標籤主體構成的範圍,只有當前標籤主體纔可以訪問NESTED範圍內的命名變量。
例如如下代碼先建立了一個names集合,而後經過<c:forEach>標籤遍歷這個集合,並打印集合中的全部元素。
<%@ page import="java.util.HashSet" %>
<%
HashSet names = new HashSet();
names.add("Tom");
names.add("Mike");
names.add("Linda");
%>
<c:forEach var="name" items="<%=names %>">
${name}
</c:forEach>
運行以上代碼,獲得的打印結果爲"Tom Mike Linda"。以上<c:forEach>標籤等價於如下的Java程序片斷:
<%@ page import="java.util.HashSet" %>
<%
for(String name : names){
pageContext.setAttribute("name",name);
name =(String)pageContext.getAttribute("name");
out.print(name + " ");
pageContext.removeAttribute("name");
}
%>
(2)<c:forEach>標籤的varStatus屬性
<c:forEach>標籤的varStatus屬性用於設定一個javax.servlet.jsp.jstl.core.Loop TagStatus類型的命名變量,它位於NESTED範圍,這個命名變量包含了從集合中取出的當前元素的狀態信息。
count:當前元素在集合中的序號,從1開始計數。
index:當前元素在集合中的索引,從0開始計數。
first:當前元素是不是集合中的第一個元素。
last:當前元素是不是集合中的最後一個元素。
(3)<c:forEach>標籤的begin、end和step屬性
<c:forEach>標籤的begin、end和step屬性分別指定循環的起始索引、結束索引和步長。
(4)<c:forEach>標籤能夠遍歷的集合
<c:forEach>標籤能夠遍歷的集合包括:
1)java.util.Set、java.util.List、java.util.Map、java.util.Iterator和java.util.Enumeration接口的實現類。
2)Java數組
3)以逗號分隔的字符串。
3.<c:forTokens>標籤
<c:forTokens>標籤用於遍歷字符串中用特定分隔符分隔的子字符串,而且能重複執行標籤主體。<c:forTokens>標籤的基本語法以下:
<c:forTokens var="表明字符串的命名變量的名字"
items="被分隔的字符串" delims="分隔符">
標籤主體
</c:forTokens>
在<c:forTokens>標籤中也可使用varStatus、begin、end和step屬性。