9.3.6 <c:choose>、<c:when>和<c:otherwise>标签
<c:choose>标签用于在多个条件中进行选择。<c:when>和<c:otherwise>标签必须作为<c:choose>的子标签使用。这三个标签相当于Java语言中的switch(...){case ...; default ...;}语句。
<c:choose>和<c:otherwise>标签没有属性,<c:when>标签只有一个test属性。该属性是boolean类型,支持动态属性值。如果test属性的执行结果为true,就会处理这个<c:when>标签体的内容。如果所有的<c:when>标签的test属性的执行结果都为false,则处理<c:otherwise>标签体中的内容。在使用<c:choose>、<c:when>和<c:otherwise>标签时应注意如下几点:
1 <c:when>和<c:otherwise>标签必须是<c:choose>标签的子标签,不能单独使用。
2 <c:choose>标签中包含一个或多个<c:when>标签,包含0个或一个<c:otherwise>标签。
3 <c:when>标签必须放在<c:otherwise>标签的前面。
4 <c:when>标签和<c:otherwise>标签中可以包含任意的JSP代码。
5 <c:choose>标签中除了包含<c:when>和<c:otherwise>标签外,还可以包含空格、“\r\n”、制表符和JSP注释,除此之外,不能在<c:choose>标签中(<c:when>和<c:otherwise>标签的外部)包含其他任何字符,否则<c:choose>标签将抛出异常。
对于最后一点,读者可以看如下的代码:
<c:choose>
<%--除了包含空格、“\r\n”、制表符和JSP注释外,在choose标签中不能包含任何其他字符 --%>
test
<c:when test = "true">abcd</c:when>
</c:choose>
在执行上面的代码时将抛出异常,这是因为在<c:choose>标签内包含了“test”。
choose.jsp页面是一个演示<c:choose>、<c:when>和<c:otherwise>标签的例子,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
这双旅游鞋的价格:
<c:choose>
<c:when test="${param.price <= 100}">
非常便宜
</c:when>
<c:when test = "${param.price > 100 && param.price <= 600}">
适中
</c:when>
<c:when test = "${param.price > 600 && param.price <= 1200}">
比较高
</c:when>
<c:otherwise>
太高了
</c:otherwise>
</c:choose>
在浏览器地址栏中输入如下的URL:
http://localhost:8080/demo/chapter9/choose.jsp?price=56
浏览器中显示的结果如图9.7所示。
图9.7 第一个<c:when>标签满足条件
如果将price请求参数的值改成2000,则会输出如图9.8所示的信息。
图9.8 <c:otherwise>标签满足条件