標準驗證器


當應用程式要求使用者輸入資料時,必然考慮到使用者輸入資料之正確性,對於使用者的輸入必須進行檢驗,檢驗必要的兩種驗證是語法檢驗(Synatic Validation)與語意檢驗(Semantic Validation)。

語法檢驗是要檢查使用者輸入的資料是否合乎我們所要求的格式,最基本的就是檢查使用者是否填入了欄位值,或是欄位值的長度、大小值等等是否符合要求。語意 檢驗是在語法檢驗之後,在格式符合需求之後,我們進一步驗證使用者輸入的資料語意上是否正確,例如檢查使用者的名稱與密碼是否匹配。

簡單的導航(Navigation) 中,我們對使用者名稱與密碼檢查是否匹配,這是語意檢驗,我們可以使用JSF所提供的標準驗證器,為其加入語法檢驗,例如:
  • index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=Big5"%>
<html>
<head>
<title>驗證器示範</title>
</head>
<body>
<f:view>
<h:messages layout="table" style="color:red"/>
<h:form>
<h3>請輸入您的名稱</h3>
<h:outputText value="#{user.errMessage}"/><p>
名稱: <h:inputText value="#{user.name}"
required="true"/><p>
密碼: <h:inputSecret value="#{user.password}"
required="true">
<f:validateLength minimum="6"/>
</h:inputSecret><p>
<h:commandButton value="送出"
action="#{user.verify}"/>
</h:form>
</f:view>
</body>
</html>

在<h:inputText>、</h:inputSecret>中,我們設定 了required屬性為true,這表示這個欄位一定要輸入值,我們也在</h:inputSecret>設定了<f: validateLength>,並設定其minimum屬性為6,這表示這個欄位最少需要6個字元。

這一次在錯誤訊息的顯示上,我們使用<h:messages>標籤,當有驗證錯誤發生時,相關的錯誤訊息會收集起來,使用<h: messages>標籤可以一次將所有的錯誤訊息顯示出來。

下面是一個驗證錯誤的訊息顯示:


JSF提供了三種標準驗證器:<f:validateDoubleRange>、<f:validateLongRange>、 <f:validateLength>,您可以分別查詢它們的 Tag Library Documentation,瞭解他們有哪些屬性可以使用,或者是參考 Using the Standard Validators  這篇文章中有關於標準驗證器的說明。