JSF - 託管 Bean



託管 Bean 是一個註冊到 JSF 的普通 Java Bean 類。換句話說,託管 Bean 是由 JSF 框架管理的 Java Bean。託管 Bean 包含 getter 和 setter 方法、業務邏輯,甚至是一個支援 Bean(一個包含所有 HTML 表單值的 Bean)。

託管 Bean 充當 UI 元件的模型。可以從 JSF 頁面訪問託管 Bean。

JSF 1.2中,託管 Bean 必須在 JSF 配置檔案(如 facesconfig.xml)中註冊。從JSF 2.0開始,可以使用註解輕鬆地註冊託管 Bean。這種方法將 Bean 及其註冊儲存在一個位置,因此更容易管理。

使用 XML 配置

<managed-bean>
   <managed-bean-name>helloWorld</managed-bean-name>
   <managed-bean-class>com.tutorialspoint.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.tutorialspoint.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 將 Bean 標記為託管 Bean,其名稱在 name 屬性中指定。如果未指定 name 屬性,則託管 Bean 名稱將預設為完整限定類名的類名部分。在本例中,它將是 helloWorld。

另一個重要的屬性是eager。如果 eager = "true",則在第一次請求託管 Bean 之前建立它,否則使用“延遲”初始化,其中只有在請求時才會建立 Bean。

作用域註解

作用域註解將作用域設定為託管 Bean 將被放置到的作用域。如果未指定作用域,則 Bean 將預設為請求作用域。下表簡要討論了每個作用域。

序號 作用域和描述
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 的生命週期與為此作用域建立的自定義 Map 中的 Bean 條目相同。

@ManagedProperty 註解

JSF 是一個簡單的靜態依賴注入 (DI) 框架。使用@ManagedProperty 註解,可以在另一個託管 Bean 中注入託管 Bean 的屬性。

示例應用程式

讓我們建立一個測試 JSF 應用程式來測試託管 Bean 的上述註解。

步驟 描述
1 JSF - 建立應用程式章節中說明的com.tutorialspoint.test包下,建立一個名為helloworld的專案。
2 修改HelloWorld.java,如下所述。保持其餘檔案不變。
3 com.tutorialspoint.test包下建立Message.java,如下所述。
4 編譯並執行應用程式以確保業務邏輯按要求工作。
5 最後,將應用程式構建成 war 檔案,並將其部署到 Apache Tomcat Web 伺服器。
6 使用以下步驟中說明的適當 URL 啟動 Web 應用程式。

HelloWorld.java

package com.tutorialspoint.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.tutorialspoint.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 Managed Beans
廣告

© . All rights reserved.