ここでは、Web アプリケーションの管理対象 Bean を作成してコンフィグレーションします。作成するのは、ユーザ ID、パスワード、氏名、連絡先などの情報を保持する UserBean という JavaBean です。
private String userId = null; private Integer password = null; private String name = null; private ContactDetailsBean contactDetails = null;
private static final long serialVersionUID = 1L;
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 を返します。
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"; } } |
import javax.faces.context.FacesContext; import javax.faces.context.ExternalContext; import java.util.Map; import javax.faces.application.FacesMessage; import util.MessageFactory;
アプリケーションを多言語対応にするには、インターナショナライゼーション機能を使用します。ここでは、JSF コンポーネントおよび Java クラスによって使用されるプロパティ ファイル内に、テキスト定数、コンポーネントのラベルとタイトル、メッセージを定義します。
UserBean の registerUser( ) メソッドは、ローカライズされたメッセージをアプリケーション リソース バンドル ファイル application.properties からキー userIdExist または thanksMsg_Registration で取得します。
userIdExists=ユーザ ID {0} はすでに存在します。別のユーザ Id を指定してください。 thanksMsg_Registration=Dear {0} さん、Workshop にご登録いただきありがとうございます。 |
JSF フレームワークでバッキング Bean をインスタンス化して適切なスコープに格納できるようにするには、managed-bean XML 要素を使用してアプリケーション コンフィグレーション リソース ファイル faces-config.xml でコンフィグレーションする必要があります。faces-config.xml ファイルは、アプリケーションの起動時に処理されます。ページが Bean を参照すると、アプリケーション コンフィグレーション リソース ファイル内のコンフィグレーションに従って、JavaServer Faces 実装が Bean を初期化します。
UserBean には、bean タイプ ContactDetailsBean の contactDetails プロパティがあります。したがって、ここではまず ContactDetailsBean の管理対象 Bean コンフィグレーションを定義し、次に UserBean の管理対象 Bean コンフィグレーションを定義します。
これにより、ContactDetailsBean の管理対象 Bean コンフィグレーションが faces-config.xml ファイルに追加されます。
これにより、管理対象 Bean user の管理対象プロパティ contactDetails が [管理対象 Bean タグ] ダイアログに追加されます。
これにより、UserBean の管理対象 Bean コンフィグレーションが faces-config.xml ファイルに追加されます。
user 管理対象 Bean の宣言によって、Session スコープ内に UserBean が作成されます。この Bean には、contactDetails 管理対象 Bean を参照する contactDetails プロパティが含まれています。
contactDetails 管理対象 Bean の宣言では、ContactDetailsBean のインスタンスは作成されません。これは、この Bean がスコープ none で定義されているためです。
チュートリアルを移動するには、矢印をクリックしてください。