5.4 条件行为 5.4.1 if标签

5.4 条件行为

条件行为用于处理页面输出取决于特定输入值的情况,这在Java中是利用ifif...elseswitch声明解决的。
JSTL中执行条件行为的有4个标签,即ifchoosewhenotherwise标签。

5.4.1 if标签

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

if标签的属性

属性 类型 描述
test+ 布尔 决定是否处理任何现有body content的测试条件
var 字符串 引用测试条件值的有界变量名称;var的类型为Boolean
scope 字符串 var定义的有界变量的范围

if标签 带标签体形式

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

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

body content中是JSP代码,当测试条件的结果为true时,就会执行标签体例的JSP代码。

实例

例如,如果找到请求参数user且值为ken,并且找到请求参数password且值为blackcomb,以下if标签将显示“You logged in successfully

1
2
3
4
<!-- param为EL隐式对象 -->
<c:if test="${param.user=='ken' && param.password=='blackcomb'}">
You logged in successfully.
</c:if>

模拟else语句

为了模拟else,下面使用了两个if标签,并使用了相反的条件。例如,如果userpassword参数的值为kenblackcomb,以下代码片断将显示You logged in successfully,否则,将显示Login failed

1
2
3
4
5
6
7
8
<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标签 没有标签体形式

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

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

实例

下面的if标签是测试userpassword参数值是否分别为kenblackcomb,并将结果保存在页面范围的变量loggedIn中。之后,利用一个EL表达式,如果loggedIn变量值为true,则显示You logged in successfully;如果loggedIn变量值为false,则显示Login failed

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