tags: JSF
Eclipse
Annotation
Common 簡介
-
JSF 的 Annotation 代表了各種bean的生命週期。
-
延伸閱讀:servlet Web 底層運作模式,
How do servlets work? Instantiation, sessions, shared variables and multithreading.
RequestScoped
@RequestScoped
的生命週期 = 單一http的request-response的週期- 每次請求結束資料都會被清理掉,也就是在每次發送新的請求時,上次更新的資料會不見。
ViewScoped
@ViewScoped
的生命週期 = JSF 的 view- 支持ajax的請求
- 由於JSF、PrimeFaces的元件很多會使用到ajax的功能,故後端經常ViewScoped的Annotation
ManageBean
- JSF Managed Bean can be created using
@ManagedBean
annotation. @ManagedBean
後面可接/可不接Managed Bean的名稱- 有接名稱:
@ManagedBean(name = "exampleName")
- 不接名稱:即該Java class的名稱,但 首字小寫
- 有接名稱:
PostConstruct
- 和Java的Construct 建構子很像,但執行順序是在Java建構子之後
- 當JSF Managed Bean初始化之後,
@PostConstruct
才會執行 - 在JSF Managed Bean的生命週期,
@PostConstruct
只會執行一次
ManageProperty
- The
@ManagedProperty
annotation enables us to inject a managed bean into another managed bean.- inject 注入:也就是不透過 initialize初始化,將該managed bean的java class直接在另一個managed bean的java class直接使用
- 使用
@ManagedProperty
這樣就不會有資料initialize初始化,被refresh的問題,而是可以繼續使用前一個managed bean的java class的資料 - 寫法:
@ManagedProperty(value = "#{exampleManageBean}")
Example 範例
Java Class1
@ManagedBean(name = "exampleManageProperty")
@ViewScoped
public class Example1 {
@PostConstruct
public void init() {
//code
}
}
Java Class2
@ManagedBean(name = "example")
@ViewScoped
public class Example2 {
@ManagedProperty(value = "#{exampleManageProperty}")
private Example1 example1;
@PostConstruct
public void init() {
//code
}
}
Reference 參考資料
- How to choose the right bean scope?
https://stackoverflow.com/questions/7031885/how-to-choose-the-right-bean-scope - JournalDev:https://www.journaldev.com/6881/jsf-managedbean-managedproperty
- postconstruct:
https://stackoverflow.com/questions/16542003/jsf-what-is-the-difference-between-postconstruct-and-direct-method-call-from
沒有留言:
張貼留言