Jsf-managed-beans

提供:Dev Guides
移動先:案内検索

JSF-マネージドBean

管理対象Beanは、JSFに登録されている通常のJava Beanクラスです。 つまり、マネージドBeanは、JSFフレームワークによって管理されるJava Beanです。 マネージドBeanには、getterおよびsetterメソッド、ビジネスロジック、またはバッキングBean(BeanにはすべてのHTMLフォーム値が含まれます)が含まれます。

マネージドBeanはUIコンポーネントのモデルとして機能します。 管理対象Beanは、JSFページからアクセスできます。

*JSF 1.2* では、マネージドBeanはfacesconfig.xmlなどのJSF構成ファイルに登録する必要がありました。 *JSF 2.0* 以降、管理Beanは注釈を使用して簡単に登録できます。 このアプローチにより、Beanとその登録が1か所に保持されるため、管理が容易になります。

XML設定の使用

<managed-bean>
   <managed-bean-name>helloWorld</managed-bean-name>
   <managed-bean-class>com.finddevguides.test.HelloWorld</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
   <managed-bean-name>message</managed-bean-name>
   <managed-bean-class>com.finddevguides.test.Message</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

注釈を使用する

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message message;
   ...
}

@ManagedBeanアノテーション

*@ ManagedBean* は、name属性で指定された名前を持つ管理対象BeanとしてBeanをマークします。 name属性が指定されていない場合、マネージドBean名はデフォルトで完全修飾クラス名のクラス名部分になります。 この場合、helloWorldになります。

もう1つの重要な属性は*熱心*です。 eager = "true"の場合、マネージドBeanは最初に要求される前に作成されます。そうでない場合、要求されたときにのみBeanが作成される "lazy"初期化が使用されます。

スコープ注釈

スコープアノテーションは、マネージドBeanが配置されるスコープを設定します。 スコープが指定されていない場合、Beanはデフォルトでスコープをリクエストします。 次の表で、各スコープについて簡単に説明します。

S.No Scope & Description
1

@RequestScoped

Beanは、HTTP要求/応答が存続する限り存続します。 HTTPリクエストに基づいて作成され、HTTPリクエストに関連付けられたHTTPレスポンスが終了すると破棄されます。

2

@NoneScoped

Beanは、単一のEL評価の間存続します。 EL評価時に作成され、EL評価の直後に破棄されます。

3

@ViewScoped

Beanは、ユーザーがブラウザーのウィンドウ/タブで同じJSFビューと対話している限り存続します。 HTTPリクエストで作成され、ユーザーが別のビューにポストバックすると破棄されます。

4

@SessionScoped

Beanは、HTTPセッションが存続する限り存続します。 セッションでこのBeanに関係する最初のHTTP要求で作成され、HTTPセッションが無効化されると破棄されます。

5

@ApplicationScoped

Beanは、Webアプリケーションが存続する限り存続します。 アプリケーションでこのBeanに関係する最初のHTTP要求で作成され(Webアプリケーションが起動し、@ ManagedBeanでeager = true属性が設定されると)、Webアプリケーションがシャットダウンすると破棄されます。

6

@CustomScoped

Beanは、このスコープ用に作成されたカスタムマップ内のBeanのエントリが存続する限り存続します。

@ManagedPropertyアノテーション

JSFは、単純な静的依存性注入(DI)フレームワークです。 @ ManagedProperty 注釈を使用して、マネージドBeanのプロパティを別のマネージドBeanに注入できます。

応用例

マネージドBeanの上記のアノテーションをテストするテストJSFアプリケーションを作成しましょう。

Step Description
1 Create a project with a name helloworld under a package com.finddevguides.test as explained in the JSF - Create Application chapter.
2 Modify HelloWorld.java as explained below. Keep the rest of the files unchanged.
3 Create Message.java under a package com.finddevguides.test as explained below.
4 Compile and run the application to make sure business logic is working as per the requirements.
5 Finally, build the application in the form of war file and deploy it in Apache Tomcat Webserver.
6 Launch your web application using appropriate URL as explained below in the last step.

HelloWorld.java

package com.finddevguides.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {
   @ManagedProperty(value = "#{message}")
   private Message messageBean;
   private String message;

   public HelloWorld() {
      System.out.println("HelloWorld started!");
   }

   public String getMessage() {

      if(messageBean != null) {
         message = messageBean.getMessage();
      }
      return message;
   }

   public void setMessageBean(Message message) {
      this.messageBean = message;
   }
}

Message.java

package com.finddevguides.test;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "message", eager = true)
@RequestScoped
public class Message {
   private String message = "Hello World!";

   public String getMessage() {
      return message;
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

home.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml">
   <head>
      <title>JSF Tutorial!</title>
   </head>

   <body>
      #{helloWorld.message}
   </body>
</html>

すべての変更を完了したら、JSF-アプリケーションの作成の章で行ったようにアプリケーションをコンパイルして実行します。 すべてがアプリケーションで問題ない場合、次の結果が生成されます。

JSFマネージドBean