返回介绍

9.4 条件行为

发布于 2025-04-22 20:10:02 字数 3682 浏览 0 评论 0 收藏

条件行为用于处理页面输出取决于特定输入值的情况,这在 Java 中是利用 if、 if …else 和 switch 声明解决的。

JSTL 中执行条件行为的有 4 个标签,即 if、choose、when 和 otherwise 标签。下面分别对其进行详细讲解。

9.4.1 if 标签

if 标签是对某一个条件进行测试,假如结果为 True,就处理它的 body content。测试结果保存在 Boolean 对象中,并创建有界变量来引用这个 Boolean 对象。利用 var 属性和 scope 属性分别定义有界变量的名称和范围。

if 的语法有两种形式。第一种形式没有 body content。

< c:if test="testCondition" var="varName"
    [scope="{page |request|session|application}"]/>

在这种情况下,var 定义的有界对象一般是由其他标签在同一个 JSP 的后续阶段进行测试。

第二种形式中使用了一个 body content。

< c:if test="testCondition [var="varName"]
    [scope="{page |request|session|application}"]> body content < /c:if>

body content 是 JSP,当测试条件的结果为 True 时,就会得到处理。if 标签的属性见表 9.5。

表 9.5 if 标签的属性

属性

类型

描述

test+

布尔

决定是否处理任何现有 body content 的测试条件

var

字符串

引用测试条件值的有界变量名称;var 的类型为 Boolean

scope

字符串

var 定义的有界变量的范围

例如,如果找到请求参数 user 且值为 ken,并且找到请求参数 password 且值为 blackcomb,以下 if 标签将显示“You logged in successfully(你已经成功登录)”:

<c:if test="${param.user=='ken' && param.password=='blackcomb'}">
  You logged in successfully.
</c:if>

为了模拟 else,下面使用了两个 if 标签,并使用了相反的条件。例如,如果 user 和 password 参数的值为 ken 和 blackcomb,以下代码片断将显示“You logged in successfully(你已经成功登录)”。否则,将显示“Login failed(登录失败)”。

<c:if test="${param.user=='ken' && param.password=='blackcomb'}">
  You logged in successfully.
</c:if>
<c:if test="${!(param.user=='ken' && param.password=='blackcomb')}">
  Login failed.
</c:if>

下面的 if 标签测试 user 和 password 参数值是否分别为 ken 和 blackcomb,并将结果保存在页面范围的变量 loggedIn 中。之后,利用一个 EL 表达式,如果 loggedIn 变量值为 True,则显示“You logged in successfully(你已经成功登录)”;如果 loggedIn 变量值为 False,则显示“Login failed(登录失败)”。

<c:if var="loggedIn"
    test="${param.user=='ken' && param.password=='blackcomb'}"/>
  ...
${(loggedIn)? "You logged in successfully" : "Login failed"}

9.4.2 choose、when 和 otherwise 标签

choose 和 when 标签的作用与 Java 中的关键字 switch 和 case 类似。也就是说,它们是用于为相互排斥的条件执行提供上下文的。choose 标签中必须嵌有一个或者多个 when 标签,并且每个 when 标签都表示一种可以计算和处理的情况。otherwise 标签则用于默认的条件块,假如没有任何一个 when 标签的测试条件结果为 True,otherwise 就会得到处理。假如是这种情况,otherwise 就必须放在最后一个 when 之后。

choose 和 otherwise 标签没有属性。when 标签必须带有定义测试条件的 test 属性,用来决定是否应该处理 body content。

举个例子,以下代码是测试参数 status 的值。如果 status 的值为 full,将显示“You are a full member(你是正式会员)”。如果这个值为 student,则显示“You are a student member(你是学生会员)”。如果 status 参数不存在,或者它的值既不是 full,也不是 student,那么这段代码将不显示任何内容。

<c:choose>
  <c:when test="${param.status=='full'}">
    You are a full member
  </c:when>
  <c:when test="${param.status=='student'}">
    You are a student member
  </c:when>
</c:choose>

下面的例子与前面的例子相似,但它是利用 otherwise 标签,如果 status 参数不存在,或者它的值不是 full 或 student,则将显示“Please register(请注册)”。

<c:choose>
  <c:when test="${param.status=='full'}">
    You are a full member
  </c:when>
  <c:when test="${param.status=='student'}">
    You are a student member
  </c:when>
  <c:otherwise>
    Please register
  </c:otherwise>
</c:choose>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。