JSF託管bean(Managed Bean)

JSF 託管bean(Managed Bean)是JSF註冊的常規Java Bean類。託管bean包含getter和setter方法,業務邏輯。JSF託管bean作為UI組件的Model。 它存儲JSF xhtml頁面使用的數據。借助JSF框架,可以從JSF頁面訪問託管Bean。
在JSF 1.2中,我們必須在JSF配置檔(如faces-config.xml)中註冊受管理的bean。
從JSF 2.0可以使用注解註冊管理bean。

使用XML配置

以下代碼顯示如何使用JSF管理的bean進行註冊 -

<managed-bean>
  <managed-bean-name>helloWorld</managed-bean-name>
  <managed-bean-class>com.zaixian.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.zaixian.test.Message</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

使用@ManagedBean注解

以下代碼顯示了如何使用注解來註冊JSF託管的bean。

@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld {

   @ManagedProperty(value="#{message}")
   private Message message;
   ...
}

@ManagedBean將bean標識為名稱屬性中指定的名稱的託管bean。如果未指定name屬性,那麼託管bean名稱將默認為簡單的類名稱,其中第一個字母小寫。 在我們的情況下是helloWorld
如果eager設置為“true”,則在請求之前創建託管bean。如果使用“lazy”初始化,只有在請求時才會創建bean。

範圍注解

範圍注解設置受管Bean的範圍。如果未指定範圍,則bean將默認為請求範圍。
我們可以將JSF bean範圍設置為以下列表。

  • @RequestScoped bean只要HTTP請求回應就行。它根據HTTP請求創建,並在與HTTP請求相關聯的HTTP回應完成時被銷毀。
  • @NoneScoped bean與單個運算式語言(EL)求值時間一樣長。 在EL求值評估時創建,並在EL求值評估後被銷毀。

  • @ViewScoped bean只要用戶在流覽器窗口中與同一JSF視圖進行交互即可。 它根據HTTP請求創建,並在用戶導航到其他視圖時被銷毀。

  • @SessionScoped bean只要HTTP會話生存。 它在第一個HTTP請求時創建,並在HTTP會話無效時被銷毀。

  • @ApplicationScoped bean只要Web應用程式生存。 它在第一個HTTP請求或Web應用程式啟動時創建,並且在@ManagedBean中設置屬性eager = true,並在Web應用程式關閉時被銷毀。

  • @CustomScoped bean只要在為此範圍創建的自定義Map中的bean的條目生效。

@ManagedProperty注釋

JSF是一個簡單的靜態依賴注入(DI)框架。 @ManagedProperty注釋標記被託管的bean的屬性以注入另一個受託管的Bean。


上一篇: JSF <f:ajax>標籤 下一篇: JSF注入託管bean實例