9.3.6 <c:choose>、<c:when>和<c:otherwise>标签

优质
小牛编辑
135浏览
2023-12-01

<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所示。

07

图9.7 第一个<c:when>标签满足条件

如果将price请求参数的值改成2000,则会输出如图9.8所示的信息。

08

图9.8 <c:otherwise>标签满足条件