はじめに
本稿では、Java Enterprise Edition 6のJSF(JavaServer Faces)のAjaxを利用した非同期通信と入力値の検証機能について紹介します。
対象読者
- JavaEE6開発に興味がある方
- これからJavaのWebアプリケーション開発をはじめる方
必要な環境
動作環境は以下のとおりです。
- Java SE 6
- NetBeans 7.0.1
今回取りあげる検証機能について
今回は、前回作成したFaceletsに入力値の検証機能を搭載する方法を紹介します。前回では入力項目に対してAjaxの機能を追加するところまで行いました。今回はAjaxを利用した入力値の検証機能の追加方法と、その種類について取り上げます。
JSF2標準で扱える検証機能
JSF2が扱える入力値の検証機能の特徴は、以下のようなものです。
- 検証機能の処理はサーバサイドにて行われます
- 検証結果のメッセージを出力する機能が用意されています
- 1つの入力コンポーネントに対して複数の検証機能を設定できます
- Javaのコードで検証機能を書かなくても利用できる標準の検証機能がいくつか提供されています
- 4に挙げた以外の検証機能を実現できるようにカスタマイズの機能も備えています
これらの機能が、JSF2のタグ1つで簡単に利用できるのも大きな特徴です。
利用できる検証機能
JSF2が持つ入力値の検証方法は、大きくわけて2つあります。
- 標準機能のみを使ってJSF2のタグで完結する方法
- 1のタグだけでは実現できない検証機能を実装する方法
1の標準機能については、以下に一覧を示します。2の実装方法についても、拡張ポイントや拡張クラスの実装方法が提供されているので、それを利用することで、とても手軽に拡張できます。さらに、拡張方法は2種類用意されており、メソッド単位で拡張する方法と、検証用クラスを作成する方法があります。拡張方法については後ほど解説します。
まずは、標準で提供されている検証機能の一覧を見てみましょう。
タグ | 検証内容 | 概要 |
<f:validateRequired> | 必須入力項目 | 指定した項目が必須入力になる。<h:inputText>などの入力項目のrequired属性と同じ。 |
<f:validateLength> | 入力項目の文字数チェック | 指定した項目に入力された文字数をチェックする。minimumで最小文字数、maximumで最大文字数。片方のみの指定も可能。送信される値はURLエンコードされ、utf-8に変換した後の文字数で扱い、全角文字1つが3文字分としてカウントされることに注意。例えば「あ」は%e3%81%82。 |
<f:validateLongRange> | 入力項目の整数範囲チェック | 指定した項目の整数値が範囲内であるかをチェックする。minimumで最小値、maximumで最大値を設定する。 |
<f:validateDoubleRange> | 入力項目の数値範囲チェック | 指定した項目の数値が範囲内であるかをチェックする。小数の範囲も設定可能。minimumで最小値、maximumで最大値を設定する。 |
<f:validateRegex> | 入力項目の正規表現チェック | 指定した項目に入力された文字列がpatternで定義した正規表現に合致するかを判定する。例えばpattern="[0-9A-Za-z]+"は、半角の数値と大文字小文字のアルファベットが1文字以上の場合に正となる。 |
Strutsなどの既存フレームワークが利用している検証機能(Validator)に比べて種類が少ないですが、最低限必要な検証機能は提供されています。例えば、入力された文字のフォーマットチェックに関してはvalidateRegexの正規表現を用いたもので対応でき、数値の範囲チェックについてはvalidateLongRangeやvalidateDoublieRangeで対応できます。なお、検証機能のタグは複数種類を組み合わせて利用することが可能です。
では、次ページから、複数の検証機能を組み合わせた際の特徴と例を見てみましょう。