条件标签能够实现 Java 语言中的 if 语句以及 if-else 语句的功能, 它包括以下几种:
- <c:if>
- : 用于实现 Java 语言中的 if 语句的功能.
- <c:choose>
- ,
- <c:when>
- ,
- <c:otherwise>
- : 用于实现 Java 语言中 if-else 语句的功能.
(1)<c:if > 标签
- <c:if>
- 标签用于实现 Java 语言中的 if 语句的功能, 它的语法为:
- <c:if test="逻辑表达式" var="代表逻辑表达式的值的命名变量的名字" scope="{page|request|session|application}"
- />
- </c:if>
- <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 属性.
来源: http://www.bubuko.com/infodetail-3056994.html