2003年度 データベース論

バリデータ
エンタープライズアプリケーション II
第9回 / 2006年7月23日
1
ここでの内容



バリデータ
サンプルプログラム
バリデータの解説
2
バリデータ
3
バリデータとは何か

入力されたデータが、そのアプリケーション
に適合するものかどうかチェックする機能。
例えば・・・



ここは必須項目なので、必ず入力しなければ
ならない。
ここには、1~10までの数が入る
適合しなかった場合は、エラーメッセージを
表示できる。
4
JSF標準のバリデータ



必須項目のチェック
数の範囲のチェック
文字列の長さのチェック
5
Tomahawkのバリデータ




e-mailアドレスのチェック
クレジットカードの番号チェック
正規表現によるチェック
2つのコンポーネントの入力値が等しいか
チェック
6
サンプルプログラム
7
データの入力
8
エラー
9
成功
10
h:panelGrid タグ (1)
<h:panelGrid columns="3">
<f:facet name="header">
<h:outputText ... />
</f:facet>
<h:outputText ... />
<h:inputText ... />
<h:message ... />
</h:panelGrid>

UIコンポーネントを表
形式でレイアウトする
ためのコンポーネント
11
h:panelGrid タグ (2)
<h:panelGrid columns="3">
<f:facet name="header">
<h:outputText ... />
</f:facet>
<h:outputText ... />
<h:inputText ... />
<h:message ... />
</h:panelGrid>

f:facet タグは、表形
式の直前に「ヘッダ」
として表示される
12
h:panelGrid タグ (3)
<h:panelGrid columns="3">
<f:facet name="header">
<h:outputText ... />
</f:facet>
<h:outputText ... />
<h:inputText ... />
<h:message ... />
</h:panelGrid>


Columns属性で指定
された個数のUIコン
ポーネントを、1行で
表示する
その後に続く3つのUI
コンポーネントが、次
の行に
13
バリデータの解説
14
必須項目のチェック
お名前を入力してください(必須):
<h:inputText id="name" required="true"
value="#{ParameterBean.name}" />

データが入力されていないとエラーになる。
15
h:message 要素 (1)
<h:inputText id="name" required="true"
value="#{ParameterBean.name}" />
<h:message for="name" style="error" />



エラーメッセージを表示するUIコンポーネント
for 属性で指定した UIコンポーネントに関するエ
ラーメッセージを表示する。
コンバータに適合しなかったらエラーメッセージを
表示する。
16
h:message 要素 (2)
<h:message for="name" style="error" />

エラーメッセージのスタイルに、style.css の ".error" と
いうクラスセレクタの設定が適用される
style.css より
.error {
font-style: italic;
color: red;
}
17
文字列の長さのチェック (1)
パスワードを設定してください(5文字以上)
<h:inputSecret id="password"
value="#{ParameterBean.password}">
<f:validateLength minimum="5" />
</h:inputSecret>
<h:message for="password" styleClass="error" />
18
h:inputSecret
パスワードを設定してください(5文字以上)
<h:inputSecret id="password"
value="#{ParameterBean.password}">
……
</h:inputSecret>

パスワードなどを入力するときに、入力された文字を
そのまま表示せずに、"・・・・・" のように伏せ字にして
表示してくれるコンポーネント
19
文字列の長さのチェック (2)
<f:validateLength minimum="5" />



文字列の長さをチェックするバリデータ
最小でも5文字は必要になる。
ほかに、maximum 属性もある。最大で何
文字までかチェックする
20
文字列の長さのチェック (3)
<h:inputSecret id="password"
value="#{ParameterBean.password}">
<f:validateLength minimum="5" />
</h:inputSecret>


f:validateLength は、h:inputSecret の子要素
になっている。
つまり、この f:validateLength は、
h:inputSecret に属している。
21
数の範囲のチェック (1)
品物の数を入力してください(1~10):
<h:inputText id="quantity"
value="#{ParameterBean.quantity}">
<f:validateLongRange
minimum="1" maximum="10" />
</h:inputText>
<h:message for="quantity" />
22
数の範囲のチェック (2)
<f:validateLongRange
minimum="1" maximum="10"/>


整数の数の範囲をチェックする。
1 ~ 10 までの範囲となる。それ以外だと
エラーになる。
23
Value Binding と
Managed Bean
<h:inputText id="quantity"
value="#{ParameterBean.quantity}">
……
</h:inputText>
// quantity プロパティは Integer 型
public Integer getQuantity() {
return quantity;
}
24
コンバータとは何か


h:inputText 要素のようなテキスト入力フィールド
には、基本的には String 型のデータが入る。
コンバータとは、Value Binding を使うタグと
Managed Beanのプロパティ間でデータ変換を行
うもの。


h:inputText に入力されたデータを、Integer や Date
型に変換
Integer や Date 型のオブジェクトの値を、
h:outputText などで出力
25
E-mailアドレスのチェック
e-mailアドレスを入力してください:
<h:inputText id="email"
value="#{ParameterBean.email}">
<t:validateEmail />
</h:inputText>

Emailアドレスの形式になっているかどうかチェッ
クする。
26
2つのコンポーネントの入力値
が等しいかチェック
<h:inputText id="email" required="true"
value="#{ParameterBean.email}" />
<h:inputText id="email2" required="true"
value="#{ParameterBean.anotherEname}”>
<t:validateEqual for="email" />
</h:inputText>

name1で入力された値とname2で入力された値が等
しいかチェックする
27
クレジットカードの番号チェック
クレジットカードの番号を入力してください:
<h:inputText id="creditCardNumber"
value="#{ParameterBean.creditCardNumber}">
<t:validateCreditCard />
</h:inputText>


クレジットカードの番号をチェックする
VISA, Master Card など (JCBはダメ)
28
正規表現によるチェック
郵便番号を入力してください(例: 097-0013):
<h:inputText id="zipNumber"
value="#{ParameterBean.zipNumber}">
<t:validateRegExpr pattern='¥d{3}-¥d{4}' />
</h:inputText>

入力データが pattern属性で指定した正規表
現にマッチするかどうかチェックする。
29
¥d{3}-¥d{4} という正規表現



まず、(0から9までの)数字が3つ並び
その後で "-" (ハイフン) がきて
(0から9までの)数字が4つ並ぶ
30
カスタム・バリデータ

バリデータは、自分で作成することもできる。
31