2012-08-04 26 views
2

我試圖修復在JSF應用程序,除其他事項外,有類「的UserBean」中的「faces-config.xml中」宣佈的會話範圍豆「的UserBean」一些錯誤。其中一種方法的代碼行如下:是否有必要使用EL來獲取JSF中的「當前」bean?

public void doSomething() { 
    ... 
    UserBean userBean = (UserBean) facesContext.getApplication().evaluateExpressionGet(facesContext, "#{userBean}", UserBean.class); 
    ... 
} 

是否有任何理由使用該長表達式而不是「this」?或者,如果一切都正確聲明,我可以確信方法執行的實例實際上是與會話相關聯的bean嗎?

+3

看起來瘋狂。雖然檢查沒有的'創建UserBean'其他地方未受管理的實例,這將是一個不同的順序的設計味道。 – McDowell 2012-08-04 17:47:43

回答

2

您可以測試它是否是同一個bean簡單地比較引用,並觸發該方法的執行,看看會發生什麼:

public void doSomething() { 
    UserBean userBean = (UserBean) facesContext.getApplication(). 
     evaluateExpressionGet(facesContext, "#{userBean}", UserBean.class); 
    if (this == userBean){ 
     System.out.println("\nIt is the same bean, time for some cleanup!"); 
    } else { 
     System.out.println("\nThere is something very weird going on here..."); 
    } 
} 

記住,thisuserBean都只是參考,指着一個區域記憶。如果它們始終相同,則可以安全地用this替代表達式。

我可以看到這種情況出現,如果有人可能在另一個地方,首先寫的代碼,然後有人重構它這段代碼移動到同一個bean,忘了改變這種參考。

相關問題