Jsf-managed-beans
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-アプリケーションの作成の章で行ったようにアプリケーションをコンパイルして実行します。 すべてがアプリケーションで問題ない場合、次の結果が生成されます。