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.yiibai.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.yiibai.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。