JSF 托管bean(Managed Bean)是JSF注冊的常規(guī)Java Bean類。托管bean包含getter和setter方法,業(yè)務邏輯。JSF托管bean作為UI組件的Model。 它存儲JSF xhtml頁面使用的數(shù)據(jù)。借助JSF框架,可以從JSF頁面訪問托管Bean。
在JSF 1.2中,我們必須在JSF配置文件(如faces-config.xml)中注冊受管理的bean。
從JSF 2.0可以使用注解注冊管理bean。
以下代碼顯示如何使用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>
以下代碼顯示了如何使用注解來注冊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”,則在請求之前創(chuàng)建托管bean。如果使用“lazy”初始化,只有在請求時才會創(chuàng)建bean。
范圍注解設置受管Bean的范圍。如果未指定范圍,則bean將默認為請求范圍。
我們可以將JSF bean范圍設置為以下列表。
@RequestScoped bean只要HTTP請求響應就行。它根據(jù)HTTP請求創(chuàng)建,并在與HTTP請求相關聯(lián)的HTTP響應完成時被銷毀。@NoneScoped bean與單個表達式語言(EL)求值時間一樣長。 在EL求值評估時創(chuàng)建,并在EL求值評估后被銷毀。
@ViewScoped bean只要用戶在瀏覽器窗口中與同一JSF視圖進行交互即可。 它根據(jù)HTTP請求創(chuàng)建,并在用戶導航到其他視圖時被銷毀。
@SessionScoped bean只要HTTP會話生存。 它在第一個HTTP請求時創(chuàng)建,并在HTTP會話無效時被銷毀。
@ApplicationScoped bean只要Web應用程序生存。 它在第一個HTTP請求或Web應用程序啟動時創(chuàng)建,并且在@ManagedBean中設置屬性eager = true,并在Web應用程序關閉時被銷毀。
@CustomScoped bean只要在為此范圍創(chuàng)建的自定義Map中的bean的條目生效。
JSF是一個簡單的靜態(tài)依賴注入(DI)框架。 @ManagedProperty注釋標記被托管的bean的屬性以注入另一個受托管的Bean。