*JSF-ManagedBeanの作成 [#c58b0c9f] (工事中)アプリケーションのWeb画面をJavaServer Faces(JSF)で作成する。~ アプリケーションのWeb画面をJavaServer Faces(JSF)で作成する。~ Java ServletやJSP(JavaServer Pages)を使用する方法もある。~ ~ 後で作成するFaceletsの画面の表示内容や画面遷移に対応するデータやロジックをManagedBeanとして作成し、サーバー内部で管理する。~ ~ ファイル→新規ファイルからManagedBeanを作成する。~ プロジェクトに-warの名前のプロジェクトを選び、カテゴリ:JavaServer FacesのJSF管理対象Beanを選択し、次へ。~ #ref(mb1.gif)~ ~ クラス名を入力し、スコープにrequestを選び、終了をクリック。~ スコープは重要であり、request:HTTPリクエストの範囲、session:HTTPセッションの範囲とManagedBeanの有効範囲が異なる。~ #ref(mb2.gif)~ ~ ソースコードの型枠が生成される。~ @Namedアノテーションでは、後で作成するFaceletsからこのManagedBeanにアクセスするための名称を指定している。~ スコープにrequestを指定したため、@RequestScopedアノテーションが付加され、コンテナにこのManagedBeanのスコープを指示している。~ #ref(mb3.gif)~ ~ ManagedBeanのコードを入力する。~ ~ 以前作成したSession Beanを使用する。~ @EJBアノテーションをつけておくとコンテナによってインスタンスが注入される。~ > @EJB private MessageBean messageBean; 画面の入出力項目に対応するフィールドを作成する。~ getter/setterも必ず作成する。~ > private String message = ""; private List<Message> messages; @PostConstructを付加したメソッドは、コンテナがオブジェクトを作成、使用準備が完了した後に呼び出される。~ 初期化にSession Beanの機能を使うときはコンストラクタが呼び出された時点では、EJBが注入されていないため、ここでSession Beanを使用した初期化を行う。~ > @PostConstruct public void init() { messages = messageBean.readMessages(); } 画面の遷移に対応したメソッドを作成する。~ ここでもSession Beanの機能を利用している。~ 戻り値に遷移先のページ名を返す。(同じページに遷移する場合はvoidでもよい)~ > public String writeMessage() { if (!"".equals(message)) { Message m = new Message(); m.setMessage(message); m.setWritetime(new Date()); messageBean.writeMessage(m); messages = messageBean.readMessages(); message = ""; } return "MessageBoard"; } *コメント [#o28fc920] #comment