這裡主要討論了JSTL的一些基礎功能,主要包括:處理複選框參數、從表單中讀取日期、錯誤處理、驗證使用者輸入。
一.處理複選框參數
這個功能比較簡單,主要是利用JSTL中paramValues這個隱式變數,它和param是相對應個,只不過前者用來處理多個同名參數,而後者是用來處理單個參數的。看下面的例子:
country.jsp:給出了一組多選框,用於選擇國家
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
---------------------處理多選框的表單-------------------<br>
<form action="checkbox.jsp" method="post">
<input value="中國" type="checkbox" name="country">
中國
<br>
<input value="英國" type="checkbox" name="country">
英國
<br>
<input value="美國" type="checkbox" name="country">
美國
<br>
<input value="法國" type="checkbox" name="country">
法國
<br>
<input value="德國" type="checkbox" name="country">
德國
<br>
<input type="submit">
</form>
</body>
</html>
checkbox.jsp:處理複選框參數
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="fmt" prefix="fmt"%>
<%@ taglib uri="core" prefix="c"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>處理複選框參數</title>
</head>
<body>
<c:choose>
<c:when test="${not empty paramValues.country}">
您選擇了下列國家:
<ul>
<c:forEach items="${paramValues.country}" var="adj">
<li>
<c:out value="${adj}" />
</li>
</c:forEach>
</ul>
</c:when>
<c:otherwise>
沒有選中任何國家
</c:otherwise>
</c:choose>
</body>
</html>
二.錯誤處理
當JSTL發生錯誤時,我們可以有3中方法來處理它:
● 不作任何處理,此時JSP容器會給我們列印出詳細的錯誤資訊,對開發人員而言有助於debug,但是對使用者而言不是很好
● 使用<c:catch>標籤捕捉異常
● 使用JSP的errorPage屬性,指定一個通用的錯誤處理頁面
第一種和第三種處理方式都比較常見,這裡主要說一下如何使用<c:catch>標籤來處理頁面異常,它的屬性如下表所示:
屬性名稱 |
描述 |
是否必須 |
預設值 |
var |
將錯誤資訊作為變數儲存起來 |
否 |
無 |
當<c:catch>標籤體裡面的內容發生錯誤時,它並不會導致整個頁面的終止執行,它只會讓<c:catch>標籤中剩下的內容終止執行,而<c:catch>標籤之外的內容仍然會繼續執行。如果沒有給<c:catch>標籤指定var屬性,那麼<c:catch>標籤體中的所有錯誤將會被忽略,頁面繼續執行;如果指定了var屬性,那麼錯誤資訊講話儲存在一個變數中,這個變數名就由var屬性指定。如果想得到關於錯誤的更多詳細資料,可以通過如下的代碼:<c:out value="${parseError.message}"/>帶列印錯誤資訊,其中parseError就是我們在<c:catch>標籤之中通過var屬性指定的值。
三.驗證輸入
JSTL不能用來做很複雜的資料驗證,比如驗證電話號碼的合法性之類的。它主要用於如下幾種簡單的驗證:
● 確保使用者在一個表單域中輸入了內容
● 檢查一個表單域中有內容時另一個域是否有或者沒有
● 檢查使用者輸入的數字是否超過了某個限制
這通常是一個應用的展示層進行驗證的順序。對輸入進行驗證時,有兩個要注意的地方:首先就是在頁面中的什麼地方對輸入進行驗證,其次就是當輸入非法時如何提示使用者,一遍他能夠修正錯誤。給出了一個利用JSTL來進行簡單驗證的模型: