<x:if>动作用于表示XML条件判断标记,仅当指定的XPath表达式计算为true时,才计算其动作体,计算结果可以保存为一个作用域变量。<x:if>动作的语法格式如下:
<x:if select="testXPathExpression"
var="varName" [scope="page|request|session|application"] />
或
<x:if select="testXPathExpression"
[var="varName"] [scope="page|request|session|application"]>
JSP elements
</x:if>
<x:if>动作共有3个属性,包括select、var和scope。
.1 select属性:指定测试条件
【功能说明】select属性用于指定测试条件表达式,以确定是否执行动作体中的内容。select属性不可以接受动态值。
【实例演示】
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<x:parse var="txl" scope="application">
<c:import url="txl.xml" charEncoding="GB2312" />
</x:parse>
<c:set var="linkmanSex" value="男" />
<c:forEach begin="1" end="7" var="linkmanId">
<x:if select="$txl/linkmans/linkman[@id=$linkmanId]/sex[. = $linkmanSex]">
<x:out select="$txl/linkmans/linkman[@id=$linkmanId]/name" />的Email地址:
<x:out select="$txl/linkmans/linkman[@id=$linkmanId]/email" /></br>
</x:if>
</c:forEach>
其中,“$txl/linkmans/linkman[@id=$linkmanId]/sex[. = $linkmanSex]”的含义是,当linkman元素的id等于linkmanId,并且linkman的sex元素等于linkmanSex时才会执行<x:if>动作体中的内容。
示例代码执行后,将显示所有性别为男的联系人的Email地址,执行效果如图9.6所示。

图9.6 使用<x:if>动作的select属性
.2 var属性:指定变量名
【功能说明】var属性用于指定保存测试条件结果的变量名称,其类型为Boolean。var属性不可以接受动态值。
【实例演示】
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<x:parse var="txl" scope="application">
<c:import url="txl.xml" charEncoding="GB2312" />
</x:parse>
<c:set var="linkmanSex" value="女" />
<c:forEach begin="1" end="7" var="linkmanId">
<x:if var="isFemale" select="$txl/linkmans/linkman[@id=$linkmanId]/sex[. = $linkmanSex]" />
<c:if test="${isFemale}">
<x:out select="$txl/linkmans/linkman[@id=$linkmanId]/name" />的电话号码:
<x:out select="$txl/linkmans/linkman[@id=$linkmanId]/mobile" /></br>
</c:if>
</c:forEach>
示例代码的执行效果如图9.7所示。

图9.7 使用<x:if>动作的var属性
.3 scope属性:指定变量作用域
【功能说明】scope属性用于指定变量的作用域范围,如page、request、session和application等。scope属性不可以接受动态值。
【实例演示】
<c:forEach begin="1" end="7" var="linkmanId">
<x:if var="isFemale" scope="session"
select="$txl/linkmans/linkman[@id=$linkmanId]/sex[. = $linkmanSex]" />
<c:if test="${isFemale}">
<x:out select="$txl/linkmans/linkman[@id=$linkmanId]/name" />的电话号码:
<x:out select="$txl/linkmans/linkman[@id=$linkmanId]/mobile" /></br>
</c:if>
</c:forEach>
相关高级JSP教程的学习,我将在以后陆续推出,敬请关注:http://www.itgao.com