02.MBean Annotations

MB Annotations


JSF 2 託管 bean 註釋(@...Scoped 註釋只對 @ManagedBean 有效)
託管 bean 註釋描述屬性
@ManagedBean

以託管 bean 的形式註冊一個類實例,然後將其放入到使用其中一個 @...Scoped 註釋指定的範圍內。如果沒有指定任何範圍,JSF 將把此 bean 放入請求範圍,如果沒有指定任何名稱,JSF 將把類名的第一個字母轉換為小寫,形成一個託管 bean 名稱;例如,如果類名為 UserBean,那麼 JSF 將創建一個託管 bean,其名為 userBeaneager name 屬性都是可選的。

@ManagedBean(name  =  "count")

註釋必須結合使用一個實現零參數構造器的 Java 類。

eagername
@ManagedProperty

為託管 bean 設置一個屬性。註釋必須放在類成員變量的聲明之前。name 屬性指定特性的名稱,默認情況下為成員變量的名稱。value 屬性是特性的值,可以是一個字符串,也可以是一個 JSF 表達式,比如 #{...}

valuename
@ApplicationScoped 在應用程序範圍RAM儲託管 bean。
@SessionScoped 在會話範圍RAM儲託管 bean。
@RequestScoped 在請求範圍RAM儲託管 bean。
@ViewScoped 在視圖範圍RAM儲託管 bean。http://technology-related.com/javaee/6/docs/api/javax/faces/bean/ViewScoped.html

@NoneScoped 將託管 bean 指定為沒有範圍。無範圍的託管 bean 在被其他 bean 引用時比較有用。
@CustomScoped

在定製範圍RAM儲託管 bean。

定製範圍就是指可以由頁面創建者訪問的地圖。可以通過編程的方式控制定製範圍內的 bean 的可視性和生命週期。value 屬性指向一個地圖。

value

@ViewScoped


有時候我們需要 MBean 的範圍比 request 長、但比 session 短的作用範圍,那就是所謂的View Scope(page scope)。view scope允許你在page範圍內進行數據操作,而不是每次發送request都需要創建一個Mbean。


使用 <a4j:include> 和 <a4j:keepAlive> 
可以使用 <a4j:include> 在父 View 中包含子 View ,而子 View 仍然可以像正常 JSF 一樣,按照導航規則導航。通常用來做嚮導之類的頁面。


keepAlive[/u] 可以保持 request scope bean 在ajax交互中存活(alive) , 這是在 Ajax4jsf JAQ:http://wiki.java.net/bin/view/Projects/Ajax4jsf中提到的resin一個問題的簡單解決辦法 .現在你可以說 :他將被保存和從新獲得在ajax request/response series中

a4j:keepAlive 該標籤通過EL表達式(#{'+name+'})得到bean, 並且保存該bean到組件樹中. 在恢復組件樹中,bean被放到request-scope中

我把後台bean的範圍從session改為request之後,發現按鈕失效,細想之後覺得原因是由點擊按鈕導致後台bean重新實例化使數據不能保存,但讓後台bean保持session的效果的話,頁面不太安全,所以用keepAlive組件可以使特定的數據得以保存。

Comments