前 次 前/次ボタンと目次ボタンとの区切り線

4. 管理対象 Bean の機能

ここでは、Web アプリケーションの管理対象 Bean を作成してコンフィグレーションします。作成するのは、ユーザ ID、パスワード、氏名、連絡先などの情報を保持する UserBean という JavaBean です。

4.1. ContactDetailsBean クラスのインポート

WEB-INF/src/java フォルダを右クリックし、[新規作成パッケージ] を選択して、このフォルダに beans および util という新しいパッケージを作成します。

あらかじめ ContactDetailsBean というクラスが用意されています。住所、市町村、都道府県、国、郵便番号、会社電話番号、自宅電話番号などの連絡先情報を保持するための非常に単純なクラスです。ContactDetailsBean.java クラスを、workshop-JSF-tutorial/web/Resources フォルダから beans パッケージにコピーします。コードを開いて確認します。

4.2. 管理対象 Bean クラス UserBean の作成

  1. [AppXplorer] ビューで beans パッケージを右クリックし、[新規作成クラス] を選択します。
  2. パッケージ名として beans、クラス名として UserBean を入力します。[追加] をクリックし、「Serializable」と入力することで、java.io.Serializable インタフェースを [インタフェース] リストに追加します。

  3. [完了] をクリックします。
  4. UserBean クラスで、次のように変数を宣言します。
    private String userId = null;
    private Integer password = null;
    private String name = null;
    private ContactDetailsBean contactDetails = null;
  5. 各変数を選択してゲッター メソッドとセッター メソッドを生成します ([ソースGetter および Setter の生成])。
  6. UserBean クラスを保存します。

4.2.1. DataStoreBean クラスと MessageFactory クラスのインポート

workshop-JSF-tutorial/web/Resources フォルダから、DataStoreBean.java クラスを beans パッケージに、MessageFactory.java クラスを util パッケージにそれぞれコピーします。

DataStoreBean は、登録済みユーザのリストを保持します。DataStoreBean クラスを開いてコードを確認します。DataStoreBean コンストラクタは、登録済みユーザのリストを保持する java.util.Hashtable のインスタンスを初期化します。このクラスは、ユーザを追加または削除したり、ユーザ情報を取得したりするためのメソッドを備えています。Hashtable では、userId をキーとし、UserBean インスタンスを値として、各ユーザがマッピングされます。

MessageFactory クラスは、ローカライズされたメッセージをアプリケーション リソース バンドル (たとえば application.properties ファイル) から取得します。クラスを開いてコードを確認します。getMessage(String, Object[ ]) メソッドは、ローカライズされたメッセージの FacesMessage インスタンスを返します。String 引数は、ResourceBundle 内のメッセージに対応するキーです。通常、Object インスタンスには、メッセージ内に埋め込まれている置換パラメータが格納されます。このクラスは、FacesContext を使用して、メッセージが登録されている Application インスタンスにアクセスします。

4.2.2. ユーザを登録するメソッドの実装

ここでは、registerUser( ) メソッドを UserBean クラスに実装します。このメソッドは、データ ストアにユーザを追加して、ローカライズされたメッセージの FacesMessage インスタンスをキー thanksMsg_Registration で取得して FacesContext に追加し、論理結果 success を返します。

ユーザ ID が同じユーザがすでに存在する場合は、ローカライズされたメッセージの FacesMessage インスタンスをキー userIdExists で取得し、取得したインスタンスを FacesContext に追加してから null を返します。

UserBean クラスに、次に示す registerUser( ) メソッドのコード行を追加します。このコード行は、workshop-JSF-tutorial/web/Typing_Aid/UserBean_registerUser_Method.txt からコピーすることもできます。

public String registerUser( ) {

    FacesContext context = FacesContext.getCurrentInstance( );
    ExternalContext extContext = context.getExternalContext( );
    Map appMap = extContext.getApplicationMap( );

    DataStoreBean dataStore = (DataStoreBean)appMap.get(DataStoreBean.DB_NAME);

    if(dataStore.getUser(userId) != null) {
      Object[ ] objArr = new Object[ ] { userId };
      FacesMessage message = MessageFactory.getMessage(context, "userIdExists", objArr);
      context.addMessage(null, message);

      return null;
    } else {
      dataStore.addUser(this);

      Object[ ] objArr = new Object[ ] { name };
      FacesMessage message = MessageFactory.getMessage(context, "thanksMsg_Registration", objArr);
      String msg = message.getDetail( );
      extContext.getRequestMap( ).put("thanksMsg_Registration", msg);
      return "success";
    }

}

このメソッドは、ユーザがすでに存在する場合、ローカライズされたメッセージを FacesContext に追加して null を返します。その結果、JavaServer Faces 実装によって、メッセージが追加された jsp ページが再表示されます。ページの新しいビューは作成されません。

FacesContext クラスと ExternalContext クラスを javax.faces.context パッケージから、Map クラスを java.util パッケージから、FacesMessage クラスを javax.faces.application から、MessageFactory クラスを util パッケージからそれぞれインポートします。

UserBean クラスを保存します。

4.3. ローカライズされたメッセージの定義

アプリケーションを多言語対応にするには、インターナショナライゼーション機能を使用します。ここでは、JSF コンポーネントおよび Java クラスによって使用されるプロパティ ファイル内に、テキスト定数、コンポーネントのラベルとタイトル、メッセージを定義します。

UserBean の registerUser( ) メソッドは、ローカライズされたメッセージをアプリケーション リソース バンドル ファイル application.properties からキー userIdExist または thanksMsg_Registration で取得します。

WEB-INF/src/java/resources にある application.properties ファイルを開き、次のコード行を追加してファイルを保存します。

userIdExists=The userId {0} already exists, pls. try another userId.
thanksMsg_Registration=Dear {0}, Thank you for registering with Workshop

4.4. 管理対象 Bean のコンフィグレーション

JSF フレームワークでバッキング Bean をインスタンス化して適切なスコープに格納できるようにするには、アプリケーション コンフィグレーション リソース ファイル faces-config.xml で、managed-bean XML 要素を使用してコンフィグレーションする必要があります。faces-config.xml ファイルは、アプリケーションの起動時に処理されます。ページが Bean を参照すると、アプリケーション コンフィグレーション リソース ファイル内のコンフィグレーションに従って、JavaServer Faces 実装が Bean を初期化します。

UserBean には、Bean タイプ ContactDetailsBean の contactDetails プロパティがあります。したがって、ここではまず ContactDetailsBean の管理対象 Bean コンフィグレーションを定義し、次に UserBean の管理対象 Bean コンフィグレーションを定義します。

4.4.1. ContactDetailsBean コンフィグレーションの宣言

  1. [Faces コンフィグレーション管理対象 Bean] を右クリックし、[新しい管理対象 Bean...] を選択します。

  2. [管理対象 Bean タグ] ダイアログで、管理対象 Bean の名前として「contactDetails」と入力し、管理対象 Bean クラスとして beans.ContactDetailsBean、スコープとして [なし] を選択します。
  3. [完了] をクリックします。
  4. これにより、ContactDetailsBean の管理対象 Bean コンフィグレーションが faces-config.xml ファイルに追加されます。

4.4.2. UserBean コンフィグレーションの宣言

  1. [Faces コンフィグレーション管理対象 Bean] を右クリックし、[新しい管理対象 Bean...] を選択します。

  2. [管理対象 Bean タグ] ダイアログで、管理対象 Bean の名前として「user」と入力し、管理対象 Bean クラスとして beans.UserBean、スコープとして [セッション] を選択します。
  3. [次へ] をクリックします。
  4. [管理対象 Bean タグ] ダイアログで、[追加] ボタンをクリックします。[管理対象プロパティタグ] ダイアログが表示されます。

  5. [管理対象プロパティタグ] ダイアログで、プロパティ名として「contactDetails」、プロパティの説明として「ユーザの連絡先情報を表す」というテキスト、プロパティ値として「#{contactDetails}」と入力します。
  6. [管理対象プロパティタグ] ダイアログで [OK] をクリックします。
  7. これにより、管理対象 Bean user の管理対象プロパティ contactDetails が [管理対象 Bean タグ] ダイアログに追加されます。
  8. [管理対象 Bean タグ] ダイアログで [完了] をクリックします。

  9. これにより、UserBean の管理対象 Bean コンフィグレーションが faces-config.xml ファイルに追加されます。
  10. [Faces コンフィグレーション管理対象 Beanuser] をダブルクリックします。
  11. 分割されたペインに、ソースと視覚的な [Faces コンフィグレーション] エディタが表示されます。
  12. user 管理対象 Bean の宣言によって、Session スコープ内に UserBean が作成されます。この Bean には、contactDetails 管理対象 Bean を参照する contactDetails プロパティが含まれています。
  13. contactDetails 管理対象 Bean の宣言では、ContactDetailsBean のインスタンスは作成されません。これは、この Bean の定義でスコープ [なし] が指定されているためです。
  14. faces-config.xml ファイルを保存します。

チュートリアルの前後の手順に移動するには、次の矢印をクリックしてください。

 

ナビゲーションをスキップ バー   ページの先頭