- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
9.4 条件行为
条件行为用于处理页面输出取决于特定输入值的情况,这在 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>
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论