07.輸入驗證器(Validator)與訊息

防堵垃圾進垃圾出~

在 UI 組件屬性 valid="true" 的情況下, 相關的物件將以此為進行更新前的動作, 驗證通過者物件群得以順利更新, 反之除不獲得更新外, 並產生相關的錯誤訊息組件(HtmlMessage, HtmlMessages).
  1. Validator 是可跨不用應用與復用的
  2. 一個輸入組件可以有 0..N 的 validator



實作概要



確保要求值輸入

  1. 將 UI 組件設置成
    1. id="name" 
    2. required="true"
  2. 自定義驗證方法可撰寫於 Managed Bean 中
  3. 錯誤訊息將由 <h:message for="從屬組件的ID" />
    1. <h:messages globol="true">

<h:message showSummary="true"
showDetail="false" for="userAgeID"
style="color: red; text-decoration:overline"/>

globalOnly:為true時,只顯示全局消息
showSummary:是否顯示消息概要。
showDetail:是否顯示消息詳細。

限定值範圍

<h:outputLabel for="firstname" value="姓氏: *" />
<h:inputText id="firstname" value="#{employeeController.firstName}"
required="true" label="Firstname">
<f:validateLength minimum="5" maximum="10"/>
</h:inputText>
<h:message for="firstname" />



與 ManagedBean 方法結合

<h:inputText id="emailInput"
    validator="#{registationBean.validateEmail}" value="...." />




標準驗證器




引用圖表( JavaServer JSF in Action, 2005 )



<f:validateLength>長度驗證器



<f:validateLongRange>長整數Long類型驗證器



<f:validateDoubleRange>長浮點數Double類型驗證器





自定義驗證方法







自定義錯誤訊息(Message)



jsf-impl.jar
  • javax.faces
    • Message.properties

faces-config.xml

<application>
<message-bundle>CustomMessages</message-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>es</supported-locale>
</locale-config>
</application>


<f:loadBundle basename="CustomMessages" var="msg"/>


自定義驗證器



  1. 實作 javax.faces.validator.Validator 介面
  2. 在 faces-config.xml 中注冊
    1. <validator-id>
      1. <validator-class>

Example

public class EmailValidator implements Validator { ... }