![]() |
![]() |
![]() |
![]() |
ここでは、Web アプリケーションの管理対象 Bean を作成してコンフィグレーションします。作成するのは、ユーザ ID、パスワード、氏名、連絡先などの情報を保持する UserBean という JavaBean です。
WEB-INF/src/java フォルダを右クリックし、[新規作成|パッケージ] を選択して、このフォルダに beans および util という新しいパッケージを作成します。
あらかじめ ContactDetailsBean というクラスが用意されています。住所、市町村、都道府県、国、郵便番号、会社電話番号、自宅電話番号などの連絡先情報を保持するための非常に単純なクラスです。ContactDetailsBean.java クラスを、workshop-JSF-tutorial/web/Resources フォルダから beans パッケージにコピーします。コードを開いて確認します。
private String userId = null; private Integer password = null; private String name = null; private ContactDetailsBean contactDetails = null; |
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 インスタンスにアクセスします。
ここでは、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 クラスを保存します。
アプリケーションを多言語対応にするには、インターナショナライゼーション機能を使用します。ここでは、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 |
JSF フレームワークでバッキング Bean をインスタンス化して適切なスコープに格納できるようにするには、アプリケーション コンフィグレーション リソース ファイル faces-config.xml で、managed-bean XML 要素を使用してコンフィグレーションする必要があります。faces-config.xml ファイルは、アプリケーションの起動時に処理されます。ページが Bean を参照すると、アプリケーション コンフィグレーション リソース ファイル内のコンフィグレーションに従って、JavaServer Faces 実装が Bean を初期化します。
UserBean には、Bean タイプ ContactDetailsBean の contactDetails プロパティがあります。したがって、ここではまず ContactDetailsBean の管理対象 Bean コンフィグレーションを定義し、次に UserBean の管理対象 Bean コンフィグレーションを定義します。
チュートリアルの前後の手順に移動するには、次の矢印をクリックしてください。
![]() ![]() |