站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式JSFLiferayPrimeFaces

【JSF】常用 Annotation 功能解釋 RequestScoped / ViewScoped / ManageBean / PostConstruct / ManageProperty

tags: JSF Eclipse Annotation

Common 簡介

RequestScoped

  1. @RequestScoped 的生命週期 = 單一http的request-response的週期
  2. 每次請求結束資料都會被清理掉,也就是在每次發送新的請求時,上次更新的資料會不見。

ViewScoped

  1. @ViewScoped 的生命週期 = JSF 的 view
  2. 支持ajax的請求
  3. 由於JSF、PrimeFaces的元件很多會使用到ajax的功能,故後端經常ViewScoped的Annotation

ManageBean

  1. JSF Managed Bean can be created using @ManagedBean annotation.
  2. @ManagedBean 後面可接/可不接Managed Bean的名稱
    • 有接名稱:@ManagedBean(name = "exampleName")
    • 不接名稱:即該Java class的名稱,但 首字小寫

PostConstruct

  1. 和Java的Construct 建構子很像,但執行順序是在Java建構子之後
  2. 當JSF Managed Bean初始化之後,@PostConstruct 才會執行
  3. 在JSF Managed Bean的生命週期,@PostConstruct 只會執行一次

ManageProperty

  1. The @ManagedProperty annotation enables us to inject a managed bean into another managed bean.
    • inject 注入:也就是不透過 initialize初始化,將該managed bean的java class直接在另一個managed bean的java class直接使用
  2. 使用@ManagedProperty這樣就不會有資料initialize初始化,被refresh的問題,而是可以繼續使用前一個managed bean的java class的資料
  3. 寫法:@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 參考資料

  1. How to choose the right bean scope?
    https://stackoverflow.com/questions/7031885/how-to-choose-the-right-bean-scope
  2. JournalDev:https://www.journaldev.com/6881/jsf-managedbean-managedproperty
  3. postconstruct:
    https://stackoverflow.com/questions/16542003/jsf-what-is-the-difference-between-postconstruct-and-direct-method-call-from

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽