[特別企画] JavaServer Facesを理解する(後編) |
JSFによるWebアプリケーション開発 |
カスタムコンバータ、カスタムバリデータ、 |
■カスタムコンバータ、カスタムバリデータ、タブハンドラクラスの実装
次に、カスタムコンバータ、カスタムバリデータ、バリデータ用タグハンドラを説明しましょう。
お客様情報入力画面(Customer.jsp)において入力されたクレジットカード番号を変換するためのコンバータは、CreditCardConverterです。
お客様情報入力画面(Customer.jsp) |
独自のコンバータを作成する場合は、javax.faces.convert.Converterインターフェイスをimplementsしたクラスを作成し、2つのメソッドを実装します。1つ目が、リクエストパラメータとして受け取ったStringなどを対応するモデルオブジェクトに変換するgetAsObjectメソッドで、Apply Request Valuesフェイズで呼び出されます。そして、2つ目がモデルデータを、プレゼンテーションとしてのStringに変換するgetAsStringメソッドで、Render Responseフェイズにおいて呼び出されます。
リスト5 CreditCardConverter.javapublic class CreditCardConverter implements Converter { |
入力されたクレジットカード番号のフォーマットが正しいかを検証するのがFormatValidatorクラスです。独自のValidatorを実装する際は、javax.faces.validator.Validatorインターフェイスをimplementsし、コンストラクタ、アクセッサメソッド、そして実際に値の検証を行うvalidateメソッドを実装します。
validateメソッドでは、初めにユーザーが入力したクレジットカード番号を(((UIOutput)component).getValue()).toString()で取得し、この後紹介するFormatValidatorTag用のJSPカスタムタグのformatPatternsで、指定したフォーマットと一致するかを検証します。そして、検証の結果はバリデータが登録されているUIコンポーネントに、setValidメソッドで設定します。
さて、前回紹介したguessNumberアプリケーションでは、ルールに反する範囲外の数値を入力した際に、エラーが表示されました。今回のアプリケーションでは、このメッセージの生成する部分の処理についても実装します。
まず、メッセージ生成のためにgetMessageResourcesメソッドで、javax.faces.context.MessageResourcesのインスタンスを取得しています。MessageResourcesは、messageテンプレートのコレクションで、ローカライズされたjavax.faces.application.Messageインスタンスを構築するために使用し、ここでは「carShopResources」というIDで取得しています。そのMessageResourcesのgetMessage()メソッドを呼び出すことにより、Messageインスタンスを取得しFacesContextに登録することで、エラーメッセージがユーザーに返されます。
なお、ここでは実際のメッセージ自体は記述していませんが、メッセージは後で説明するfaces-config.xml内に定義します。
リスト6 FormatValidator.javapublic class FormatValidator implements Validator { |
FormatValidatorTagは、FormatValidatorをJSPで利用するためのタグハンドラクラスです。Validatorのタグハンドラを実装する際は、javax.faces.webapp.ValidatorTagクラスを継承します。
FormatValidatorTagでは、まず、コンストラクタ内でsuper.setID("FormatValidator")を呼び出し、FormatValidatorというIDでこのValidatorを登録します。このIDは、faces-config.xml内にValidatorを登録するときのID(<validator-id>)と一致する必要があります。次に、createValidatorメソッドで、FormatValidarをインスタンス化し、JSPタグ内で指定したフォーマットをformatPatternsプロパティに設定しています。実際の値の検証は、先ほど作成したFormatValidator内で行いますので、タグハンドラの実装は以上になります。
リスト7 FormatValidatorTag.javapublic class FormatValidatorTag extends ValidatorTag { |
購入画面(buy.jsp) |
3/4 |
INDEX |
||
JavaServer Facesを理解する(後編) | ||
Page1 JSFアプリケーションの構築 |
||
Page2 |
||
Page3 カスタムコンバータ、カスタムバリデータ、タブハンドラ |
||
Page4 UIコンポーネント、JSFタグライブラリを使用したJSPの作成 ページナビゲーションの定義 まとめ |
INDEX | |
特別企画:JavaServer Facesを理解する | |
前編 JSFの構造を理解する | |
後編 JSFによるWebアプリケーション開発 |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|