nbsp;
条件标记
JSTL 提供了几个条件标记(<c:if>、<c:choose>、<c:when> 和 <c:otherwise>)以及一个用于捕获 JSP 页面中异常的标记 (<c:catch>)。这些标记虽然简单、有用,但并非得益于 JSP 2.0 的片段属性特性,该特性允许单个标记处理多个 JSP 片段。本文的此部分使用片段属性构建一个更复杂的名为 <u:if> 并由 IfTag 类处理的条件标记。IfTag 示例还演示了如何捕获在 JSP 片段执行过程中可能发生的任何异常。
使用片段属性
假设有一个包含两个文本域(unitPrice 和 quantity)的表单,需要计算总价。还需要处理用户未填写表单或提供非数字值(可能生成 NumberFormatException)的情况。在实际应用
程序中,可能会使用框架(如 JavaServer Faces (JSF))生成 HTML 表单和验证用户输入。但为了测试本部分中开发的条件标记,假设要创建不使用专用标记库的表单。以下是要使用的代码:
<!-- IfTest.jsp -->
<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>
<%@ taglib prefix=\"u\" uri=\"/WEB-INF/util.tld\" %>
<html>
<body>
<form method=\"post\">
<c:set var=\"paramsProvided\"
value=\"${!empty param.unitPrice and !empty param.quantity}\"/>
<p> Unit Price:
<input type=\"text\" name=\"unitPrice\" size=\"10\"
value=\"\" >
<p> Quantity:
<input type=\"text\" name=\"quantity\" size=\"10\"
value=\"\">
<p> <input type=\"submit\" value=\"Calculate Price\">
</form>
</body>
</html>
[Page]
以下代码演示了如何使用 JSTL 的 <c:if> 和 <c:catch> 标记验证表单数据:
<c:if test=\"${paramsProvided}\">
<c:catch var=\"error\">
<c:set var=\"price\"
value=\"${param.unitPrice * param.quantity}\"/>
<p> Price:${price}
</c:catch>
</c:if>
<c:if test