このチュートリアルでは、JSF 1.2 (Woodstock) のコンバータとバリデータについて学びます。コンバータは、計算などのさまざまな目的で、文字列の入力をデータの Java データ型に変換するために使用されます。バリデータは、ユーザーの入力が指定された範囲内にあるかどうかを確認するために使用されます。Visual Web JSF フレームワークを使用して、気温を摂氏から華氏に変換するアプリケーションを作成します。このアプリケーションは、コンバータを使用してユーザーの入力を文字列の値から数値の Java データ型に変換し、アプリケーションが計算できるようにします。アプリケーションは、バリデータを使用してデータが指定した範囲内にあるかどうかを確認し、メッセージコンポーネント経由で妥当性検査エラーをレポートします。次に、通貨の値を計算したり、書式付きの日付の値を表示したりする Web アプリケーションを構築します。
また、独自の妥当性検査ハンドラをアプリケーションに追加する方法と、標準の妥当性検査が失敗したときに、IDE が提供する組み込みのエラーメッセージをオーバーライドする方法も学習します。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
| NetBeans IDE |
Web および Jave EE の version 6.1 または 6.0 |
| Java Developer Kit (JDK) |
Version 6 または
version 5 |
JavaServer Faces コンポーネント /
Java EE プラットフォーム |
1.2 と Java EE 5* または
1.1 と J2EE 1.4
|
| GlassFish アプリケーションサーバー |
V2 |
| Travel データベース |
任意 |
* NetBeans IDE の Java EE 5 機能を活用するためには、GlassFish アプリケーションサーバー V2 UR2 などの、Java EE 5 仕様に完全に準拠したアプリケーションサーバーを使用してください。別のサーバーを使用している場合は、「リリースノート」と「FAQ」で既知の問題やその回避策を確認してください。サポートされているサーバーと Java EE プラットフォームについては、「リリースノート」を参照してください。
NetBeans IDE 6.1 を使用している方へ
- NetBeans 6.1 でプロジェクトを作成すると新しいオプションが含まれますが、これらのオプションはデフォルトのままでかまいません。たとえば、「ライブラリの格納用に専用フォルダを使用」チェックボックスは選択しないままにします。
- NetBeans IDE 6.1 には、要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
アプリケーションの設計
この節では、アプリケーションを作成して、必要なコンポーネントを追加します。
注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
-
新しい Web アプリケーションプロジェクトを「ValidatorConverter」という名前で作成します。Visual Web JavaServer Faces フレームワークを有効にします。
次の図に、このあとの手順で作成するページを示します。
-
「コンポーネントパレット」の「基本」セクションから「テキストフィールドテキスト」コンポーネントをドラッグし、ページにドロップします。「label」プロパティーを Celsius に、「text」プロパティーを 0.0 に設定します。
「label」プロパティーおよび「text」プロパティーは、「プロパティー」ウィンドウの「外観」セクションの下にあります。テキストの値は、実行時に表示されるデフォルト値です。
-
「プロパティー」ウィンドウでチェックボックスを選択して、テキストフィールドコンポーネントの「required」プロパティーを True に設定します。
「required」プロパティーは、「プロパティー」ウィンドウの「データ」セクションの下にあります。True の値は、ユーザーによる入力フィールドへの値の入力を必要とします。ユーザーが値を入力せずにページを送信しようとすると、標準妥当性検査エラーメッセージが返されます。必須プロパティーが設定されたことを示す、赤いアスタリスクが「Celsius」ラベルの横に表示されます。
- ページに「ラベル」コンポーネントを配置します。ラベルのテキストを「
Fahrenheit」に設定します。
- 「Fahrenheit」ラベルの右に「静的テキスト」コンポーネントを配置します。「text」プロパティーに、華氏メモリでの水の氷点を表す
32.0 を設定します。
- 「パレット」の「基本」セクションから、「メッセージ」コンポーネントをドラッグし、「Fahrenheit」ラベルの下にドロップします。
-
Ctrl-Shift キーを押しながら、メッセージコンポーネントからテキストフィールドコンポーネントまで線をドラッグします。
次の図に示すように、メッセージコンポーネントのテキストが「textField1 のメッセージの概要」に変わります。
次のセクションでは、ユーザーの入力が指定した範囲内にあるかどうかを確認するバリデータを追加します。
バリデータの使用
アプリケーションが、ログインやパスワードなどのユーザーからの情報を収集する場合、ユーザーのデータを確認することが重要です。IDE にはユーザーの入力を検査する一連のコンポーネントが用意されています。「コンポーネントパレット」の「バリデータ」セクションから、それらにアクセスできます。単純な妥当性検査では、入力フィールドに特定の種類の値があることが確認されます。
Double 範囲バリデータは、数値入力の値が指定した範囲内であるかどうかをテストします。データ型は、浮動小数点または浮動小数点に変換可能なものである必要があります。その他のバリデータには、長さバリデータおよび Long 範囲バリデータが含まれています。
- 長さバリデータを使用して、コンポーネントに入力されたテキストの長さが、バリデータの「minimum」プロパティーおよび「maximum」プロパティーに指定した値よりも短くないか、または長くないかを検査します。値は Java.lang.String である必要があります。
- Long 範囲バリデータを使用して、ユーザーの入力した値が、最小値と最大値の範囲内にあるかどうかを検査します。値は、Java の Long データ型に変換可能な、任意の文字列値である必要があります。
バリデータ、または後述のコンバータの使用で説明されているコンバータを使用する場合、妥当性検査が失敗したときに、それを示すメッセージコンポーネントを使用することもあります。Web アプリケーションは、ボタンアクションメソッドなどの値変更またはアクションリスナーを呼び出す前に、すべての妥当性検査を実行します。1 つまたは複数の妥当性検査エラーが発生した場合は、値変更リスナーとアクションリスナーは呼び出されず、ユーザーが問題を修正できるように、Web アプリケーションによってページが再表示されます。
このアプリケーションでは、ページが送信される前に、「テキストフィールド」コンポーネントに 1 文字以上の文字が含まれていることを確認します。また、妥当性検査が失敗したときに、それを示すメッセージコンポーネントも必要です。
前の節で追加した「メッセージ」コンポーネントは、妥当性検査が失敗したかどうかをユーザーに示します。
注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
-
「パレット」の「バリデータ」セクションを展開します。「パレット」から「Double 範囲バリデータ」をドラッグし、「テキストフィールド」コンポーネントの上にドロップします。
Double 範囲バリデータは、画像ではないコンポーネントです。デフォルト値 doubleRangeValidator1 は、次の図に示すように、「ナビゲータ」ウィンドウおよび「プロパティー」ウィンドウの「validator」プロパティーに表示されます。
- 「ナビゲータ」ウィンドウで、「doubleRangeValidator1」を選択します。
-
「プロパティー」ウィンドウでバリデータの範囲を設定します。
- 「
maximum」プロパティーを 1000.0 (非常に高い温度) に設定します。
- 「
minimum」プロパティーを -273.15 (摂氏メモリの絶対零度) に設定します。
この節では、「Double 範囲バリデータ」を使用して、アプリケーションでユーザーが入力した値の妥当性検査を行えるようにしました。次の節では、コンバータを使用して、アプリケーションで、数値文字列で入力された摂氏温度を華氏の値に計算できるようにします。
コンバータの使用
IDE には、コンポーネントのデータを変換するのに使用できる、一連のコンバータが用意されています。コンバータは、コンポーネントプロパティーの java.lang.String 値と Java のデータ型の間の変換を行います。
標準コンバータには、「コンポーネントパレット」の「コンバータ」セクションからアクセスできます。コンポーネントをバインドする場合、通常、IDE はデータ型を識別し、値プロパティーへのバインドを確立するときに、適切なコンバータを設定します。ただし、コンポーネントのコンバータプロパティーを設定して、IDE に手動でコンバータを追加することもできます。
注: 変換は、妥当性検査処理が開始する前に行われます。アプリケーションで、指定されたデータ型に変換できない値をユーザーが入力した場合、Web アプリケーションでその入力が拒否され、エラーメッセージが送信されます。このエラーメッセージは、「メッセージグループ」コンポーネントや、関連付けられた「メッセージ」コンポーネントがページにある場合は、これらのコンポーネントに表示されます。数値コンバータは便利なコンバータで、入力が一致する必要があるパターンを指定できます。
その他のコンバータコンポーネントには、次のものが含まれます (ただし、これらに限定されない)。
- BigDecimal コンバータは、java.lang.String 値と java.math.BigDecimal のデータ型の間の変換を行います。たとえば、JSF コンポーネントを Oracle データベースの NUMBER 型の列にバインドする場合です。
- Boolean コンバータコンポーネントは、java.lang.String 値と、java.lang.Boolean データ型または Java boolean プリミティブ型のいずれかの間の変換を行います。たとえば、JSF コンポーネントをデータベースの BOOLEAN 型の列にバインドする場合です。
- バイトコンバータコンポーネントiは、java.lang.String 値と、java.lang.Byte データ型または Java byte プリミティブ型のいずれかの間の変換を行います。たとえば、JSF コンポーネントをデータベースの SMALLINT 型または TINYINT 型の列にバインドする場合です。
- カレンダコンバータコンポーネントは、java.lang.String 値と java.util.Calendar データ型の間の変換を行います。この変換は、dateTime 型のフィールドがある Web サービスへのバインドを行う場合などに適用されます。
前の手順では、入力した摂氏温度が絶対零度と 1000 度の間であることを確認するバリデータを設定しました。次の手順では、Double コンバータを使用してユーザーの入力を double に変換します。これにより、double を使用して摂氏の入力に対して華氏の値を計算できます。
注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
-
「パレット」の「コンバータ」セクションを展開します。Double コンバータを「パレット」から「テキストフィールド」コンポーネントにドラッグします。
このコンバータは、「テキストフィールド」コンバータが文字列よりも倍精度浮動小数点オブジェクトを返すように指定します。「プロパティー」ウィンドウおよび「ナビゲータ」ウィンドウには、デフォルト値の doubleConverter1 が表示されます。
-
「テキストフィールド」コンポーネントをダブルクリックすると、ソースコードが Java エディタで開きます。
-
textField1_processValueChange アクションメソッドに、次の太字で示されるコードを追加します。
| コード例 1: 値変更イベントハンドラメソッド |
public void textField1_processValueChange(ValueChangeEvent event) {
double celsiusTemp = ((Double) textField1.getText()).doubleValue();
double fahrenheitTemp = 9.0 * celsiusTemp / 5.0 + 32.0;
staticText1.setText(new Double(fahrenheitTemp));
} |
このコードは 2 つの変数を設定します。textField1 に入力した値 celsiusTemp と、指定した計算を適用して celsiusTemp を変換した値 fahrenheitTemp です。最後の行は、静的テキストフィールドの fahrenheitTemp に新しい値を設定します。
アプリケーションのテスト
この節では、可能な妥当性検査エラーおよび変換エラーを示す、さまざまな変数を含むアプリケーションを実行します。
- 「実行」>「主プロジェクトを実行」を選択し、アプリケーションを構築して実行します。
-
テキストフィールドの 0.0 を削除し、値を入力せずに Enter キーを押します。次の図に示すように、テキストフィールドにエラーが表示されることを確認します。
このエラーは、実際、テキストフィールドの「required」プロパティーを true に設定すると発生します。ページの訪問者がページを送信すると、Web アプリケーションでは、次の順序で入力が検査されます。
- 変換
- 必須入力
- 妥当性検査
注: 値変更イベントは、値が実際に変更され、すべての妥当性検査に合格した場合にのみ発生します。
-
アプリケーションをテストするために、さまざまな数を入力します。次の図は、100 を入力した場合の結果を示しています。
-
範囲外の値を入力すると妥当性検査エラーが表示され、数値以外の文字列値を入力すると変換エラーが表示されることを確認します。
次の図は、「-1000」を入力した場合の結果を示しています。妥当性検査または変換エラーが発生すると、値変更リスナーメソッドが呼び出されず、静的テキストコンポーネントの値は変更されません。
-
20x のような、英数字の文字列を入力します。このアプリケーションは数字書式のみを変換するように構成されているので、次の図に示すように、変換エラーが返されます。
その他の可能な操作: 数値および日時コンバータの使用
2 つの標準コンバータ、数値コンバータと日時コンバータには、データの書式および種類を指定できる独自のプロパティーがあります。このチュートリアルでは、これらの 2 つのコンバータの使用方法を説明します。
次の図に、この節で作成するページを示します。
注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
- 「プロジェクト」ウィンドウで、「ValidatorConverter」>「Web ページ」を選択して右クリックし、「新規」>「Visual Web JSF ページ」を選択します。ページに「Currency」という名前を付け、「完了」をクリックします。
- 「ValidatorConverter」>「Web ページ」>「Currency.jsp」順に選択して右クリックし、「開始ページとして設定」を選択します。
- 「コンポーネントパレット」の「Woodstock 基本」セクションから「テキストフィールド」コンポーネントをドラッグし、ページにドロップします。「プロパティー」ウィンドウで、テキストフィールドの「label」プロパティーを Dollar Amount: にして、その「required」プロパティーを True に設定します。
- 「ボタン」コンポーネントを「テキストフィールド」コンポーネントの右側に配置します。ボタンのテキストを Convert に変更します。
注: IE 7 では、JSF 1.2 の「ボタン」コンポーネントの幅に影響する既知の問題があります。問題を回避するには、「ボタン」コンポーネントをレイアウトコンポーネント (グリッドパネル、グループパネル、またはレイアウトパネル) 内に配置します。レイアウトコンポーネントのサイズを変更すると、「ボタン」コンポーネントのサイズが自動的に変更されます。
-
「パレット」の「基本」セクションから、「ラベル」コンポーネントを 2 つ、ページ上にドラッグします。
最初のラベルのテキストを Converted to Euros: に設定し、2 番目のテキストを Date and Time: に設定します。
- それぞれのラベルの横に「静的テキスト」コンポーネントを配置します。
-
「パレット」の「基本」セクションから、「メッセージ」コンポーネントをドラッグし、「Date and Time」ラベルの下にドロップします。
Ctrl-Shift キーを押しながら、メッセージコンポーネントからテキストフィールドコンポーネントまで線をドラッグします。
-
「パレット」の「コンバータ」セクションから、「数値コンバータ」をドラッグし、「テキストフィールド」コンポーネントにドロップします。
数値コンバータは、「テキストフィールド」コンバータが文字列よりも数値オブジェクトを返すように指定します。
-
「数値書式」ダイアログで、「種類」ドロップダウンリストから「通貨」を選択します。次の図に示すように、小数点以下の最大値のプロパティーを 2 に設定し、ロケールを「英語 (アメリカ合衆国)」にして、「了解」をクリックします。
通貨コードのデフォルトは、「USD、アメリカ合衆国、ドル」、つまりロケールに関連した通貨の省略名、国名、通貨名になります。異なるロケールを選択して、さまざまな通貨を表示します。
数値コンバータは、「プロパティ」ウィンドウの「converter」プロパティーおよび「ナビゲータ」ウィンドウに表示されます。
- 「パレット」から数値コンバータをドラッグし、「Converted to Euros」ラベルの横の静的テキストにドロップします。
-
「数値書式」ダイアログで、「種類」ドロップダウンリストから「通貨」を選択し、「ロケール」ドロップダウンリストから「ドイツ語 (ドイツ)」を選択します。小数点以下の最大値のプロパティーを 2 に設定し、「了解」をクリックします。
今度は、通貨コードのデフォルトが「EUR、ユーロ諸国、ユーロ」になります。たとえば、ドイツ語 (スイス) を選択した場合、スイスはユーロ地域ではないため、通貨コードのデフォルトは「CHF、スイス、フラン」になります。
- 「パレット」から日時コンバータをドラッグし、「Date and Time」ラベルの横の静的テキストにドロップします。
- 「ナビゲータ」ウィンドウで、「dateTimeConverter1」を選択します。
- コンバータの「プロパティー」ウィンドウで、「pattern」プロパティーの省略符号ボタン (
) をクリックします。
-
「パターン」フィールドに「EEE, d MMM yyyy HH:mm:ss zzzz」と入力し、「了解」をクリックします。パターンに要素を追加すると、「プロパティー」ウィンドウの「pattern」プロパティーに、現在の値が表示されます。
要素を入力するときに、値がどのように変わるかを確認します。たとえば、最初の EEE の代わりに EEEE と入力した場合、パターンには省略名の代わりに完全な曜日が含まれます。最後に z だけを入力した場合、タイムゾーンが省略されます。
日時の書式に関する詳細については、Java チュートリアルの Customizing Formats のレッスンを参照してください (別ページで外部リンクを表示)。
コードの追加
- 「Convert」ボタンをダブルクリックすると、ソースコードが Java エディタで開きます。
-
button1_action メソッドのすぐ上に、次の 2 行を追加します。ユーロのドルに対する為替レートを 0.74 で概算します。
| コード例 2: ドルとユーロの交換の定数値 |
// ドルとユーロの交換の定数値
private static final double us2euros = 0.74; |
-
button1_action メソッドに、次の太字のコードを追加します。コード内のコメントは、各行の機能を示しています。
| コード例 3: ドルとユーロの交換の定数値 |
public String button1_action( ) {
// ユーザーの入力したドルの額を取得
Number dollars = (Number) textField1.getValue();
// ドルをユーロに交換
double euros = dollars.doubleValue() * us2euros;
// ユーロの額を表示
staticText1.setText(new Double(euros));
// 日時を計算
Date date = new Date();
staticText2.setText(date);
return null;
} |
- Java エディタを右クリックし、「インポートを修正」を選択します。完全修飾名 java.util.Date を選択し、「了解」をクリックします。
アプリケーションのテスト
- アプリケーションを実行します。
- $10 など、さまざまな額の文字列を入力します。次のルールを確認してください。
- 入力文字列の最初の文字が通貨記号 (このケースでは $) ではない場合、または通貨記号と最初の数字の間に空白がある場合、コンバータは例外をスローします。「メッセージ」コンポーネントにエラーが表示されます。
- $1,234 のように、コンマをセパレータとして使用できますが、これは必須ではありません。間違った場所に配置されたコンマは、それが小数点の右側であっても無視されます。変換後、コンマは正しい位置に再表示されます。
- 小数点の右に 2 けた以上を入力すると、もっとも近いペニー (1 セント) に丸められます。これはロケールに固有のもので、日本のように通貨の値が 10 進値で表示されるロケールでは異なります。
次の図は、「$100.00」を入力した場合の結果を示しています。
次の図では、$ を付けないで「100」を入力した場合の結果を示します。前回の計算で変換された値が残っていますが、変換エラーが表示されます。
数値書式の詳細については、Java チュートリアル Customizing Formats を参照してください (別ページで外部リンクを表示)。
その他の可能な操作: 独自の妥当性検査ハンドラの追加
標準のバリデータが必要な妥当性検査チェックを実行しない場合、独自の妥当性検査ハンドラを簡単に追加できます。この節では NetBeans Visual Web JSF Application 機能を使用し、ユーザーの入力をチェックして 3 けたの数字に制限する妥当性検査ハンドラを作成できます。これらの手順は、前の節で作成した Currency.jsp ページに追加できます。
注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
- 「デザイン」ボタンをクリックして、ビジュアルデザイナに戻ります。
- 「Dollar Amount」テキストフィールドコンポーネントを選択して、「required」プロパティーを False に設定します。
- 「コンポーネントパレット」の「Woodstock 基本」セクションから「テキストフィールド」コンポーネントをドラッグし、ページにドロップします。テキストフィールドの「label」プロパティーを Value: に設定し、「required」プロパティーを True に設定します。
- 「ボタン」コンポーネントを「テキストフィールド」コンポーネントの右側に配置します。ボタンのテキストを「Submit」に変更します。
-
「メッセージ」コンポーネントを「テキストフィールド」コンポーネントの下に配置します。Ctrl-Shift キーを押しながら、メッセージコンポーネントからテキストフィールドコンポーネントまで線をドラッグします。
「メッセージ」コンポーネントのテキストが「textField2 のメッセージ概要」に変わります。
-
「テキストフィールド」コンポーネントを右クリックし、「イベントハンドラを編集」>「validate」を選択します。
Java エディタが開きます。IDE が、ValidatorException、FacesContext、および FacesMessage クラスのインポート文を、コードに自動的に追加します。挿入ポイントは、テキストフィールドの妥当性検査イベント内です。3 つ目のパラメータ「value」は、妥当性検査を行う文字列です。
-
次の太字のコードを入力します。
| コード例 4: カスタムバリデータコード |
public void textField2_validate(FacesContext context, UIComponent component, Object value) {
String s = String.valueOf(value);
if (!s.matches("\\d\\d\\d")){
throw new ValidatorException(new FacesMessage
("Not a three-digit number."));
}
} |
String s の matches メソッドは、文字列が受け入れる可能性がある有効な値を指定するのに、正規表現を使用します。\d は数字 (0-9) と一致します。
文字列リテラルの文字「\」は、Java パーサーにとって特別な意味を持っています。2 つ目の「\」をエスケープするために追加の「\」を指定し、変更されずにパーサーからパターンインタプリタに渡されることを確認します。これで、式 \d\d\d は、000 から 999 までの、任意の 3 けたの数字に一致します。
文字列が正規表現に一致しない場合は、ValidatorException コンストラクタにメッセージが渡されます。メッセージは FacesMessage の待ち行列に入れられ、レンダリング応答フェーズ中はページ上に表示されます。
- Java エディタを右クリックし、「インポートを修正」を選択します。「すべてのインポートを修正」ダイアログで、「了解」をクリックします。IDE が javax.faces.validator.ValidatorException および javax.faces.application.FacesMessage パッケージをインポートします。
-
アプリケーションを実行します。アプリケーションをテストするために、異なる長さの数字と文字列を入力します。テキストフィールドに値を入力しなかった場合に、標準の妥当性検査エラーが表示されることも確認します。
次の図は、4 けたの数字を入力した場合の結果を示しています。
その他の可能な操作: 標準バリデータメッセージのカスタマイズ
標準の妥当性検査が失敗したときに NetBeans IDE が提供する組み込みのエラーメッセージは、オーバーライドできます。
カスタムメッセージを入れる、プロジェクトのリソースバンドルを作成します。これはコンポーネントレベルのオーバーライドではなく、大域オーバーライドです。つまり、必要なコンポーネントすべてで同じ値が返されることを意味します。
メッセージのカスタマイズ
この節では、JSF 1.1 または J2EE 1.4 で長さバリデータ、Double 範囲バリデータ、および Long 範囲バリデータのメッセージをカスタマイズする方法を説明します。この手順は、JSF 1.2 でカスタマイズしたメッセージを追加するよりも少し長くなっています。IDE を使用して、必須入力に対するデフォルトのエラーメッセージをカスタマイズします。最初に、プログラムが使用するキーを、ユーザーに表示される文字列にマップするリソースバンドルを作成します。次に、MyResources.properties リソースバンドルを示す faces-config.xml を編集します。
注: この節の手順は、ValidatorConverter という名前のプロジェクトに依存します。別の名前を選択した場合は、プロジェクト名のすべての使用箇所を変更し、使用するプロジェクトの名前を反映してください。
注: NetBeans IDE 6.1 には要求時バインド機能があります。コンポーネントに Java コーディングが必要な場合は、Visual Web JSF アプリケーション内のコンポーネントにバインド属性を手動で追加する必要があります。バインド属性を追加するには、各コンポーネントを右クリックし、「バインド属性を追加」を選択します。詳細は、「On-demand Binding Attribute Wiki」を参照してください。
- 「プロジェクト」ウィンドウで ValidatorConverter を右クリックし、「新規」>「その他」を選択します。
- 「新規ファイル」ウィザードの「カテゴリ」フィールドで「その他」を選択し、「ファイルの種類」フィールドで「プロパティーファイル」を選択して「次へ」をクリックします。
-
「ファイル名」フィールドに「MyResources」と入力し、「フォルダ」フィールドに「src/java/validatorconverter」と入力して、「完了」をクリックします。
IDE でリソースバンドルが作成され、MyResources.properties·ファイルが開きます。MyResources.properties ファイルは、コンポーネントで使用されるメッセージの代替テキストを提供します。
-
MyResources.properties ファイルを閉じます。
-
「ファイル」ウィンドウで、「ValidatorConverter」>「src」>「java」>「validatorconverter」の順に展開します。次に、MyResources.properties を右クリックして「開く」を選択し、キーと値のプロパティーエディタを開きます。
キーと値のプロパティーエディタでは、キー値のペアをリソースバンドルに追加できます。
- 「新規プロパティー」をクリックします。
-
「新規プロパティー」ダイアログで、「キー」フィールドに「javax.faces.component.UIInput.REQUIRED」と入力します。「値」フィールドに、「Please enter a value and then press Enter」と入力します。
重要: キーの最後に空白がないことを確認してください。空白があると、実行時にアプリケーションが動作しません。
標準メッセージのすべてのキーの一覧は、このあとの標準メッセージキーを参照してください。
-
「了解」をクリックします。次の図に示すとおり、プロパティーエディタに値が表示されます。
- 「プロジェクト」ウィンドウで、「ValidatorConverter」>「Web ページ」>「WEB-INF」の順に展開します。faces-config.xml 上で右クリックし、「開く」を選択します。
- 編集ツールバーで「XML」をクリックします。
-
faces.config ファイル内に次のコードを入力します。このコードにはプロジェクトの名前が含まれています。使用するプロジェクト名が ValidatorConverter ではない場合、コード内のテキストを適宜変更してください。メッセージバンドル要素では、プロジェクト名の大文字を小文字に変更するようにしてください。
<application>
<message-bundle>validatorconverter.MyResources</message-bundle>
</application>
message-bundle 要素は、一連のローカライズされたメッセージを示しています。この要素には、ローカライズされたメッセージを含むリソースバンドルへの完全修飾パスが含まれています。この場合は、validatorconverter.MyResources です。
- プロジェクトを実行します。
-
テキストフィールドのテキストを削除し、Enter キーを押します。
次の図に示すとおり、メッセージフィールドにカスタマイズしたメッセージが表示されます。
標準メッセージキー
NetBeans IDE では、変換、妥当性検査、または要求処理ライフサイクル中のその他のアプリケーションアクションの結果として発生する情報メッセージを処理するために、リソースバンドルを使用できます。次の表に、標準メッセージのキーを一覧表示します。
まとめ
このチュートリアルでは、次の方法を学びました。
- コンバータを使用して、温度の書式や通貨の値を変換するために入力文字列を変換したり、日付書式を表示したりしました。
- バリデータを使用して、入力した値が指定した範囲内および書式であることを確認しました。
- 独自の妥当性検査ハンドラを作成し、ユーザーに表示するメッセージをカスタマイズしました。
関連項目
更新日: 2008 年 4 月 15 日