2013-02-21 52 views
0

假設我有一個這樣的類:ManagedBean和XHTML設計戰略要求

@ManagedBean 
public class A { 

@ManagedProperty("#{B}") 
private B b; 

private Object o; 

public void operation() { 
    b.methodCall(o); 
} 

public void setB(B b) { 
    this.b = b; 
} 

public Object getO() { 
    return o; 
} 

public void setO(Object o) { 
    this.o = o; 
} 

} 

現在,當我把從XHTML的方法調用我可以簡單的寫:

<p:commandButton actionListener="#{a.operation()}" /> 

不過我還可以添加一個getter到我的託管bean:

public B getB() { 
    return b; 
} 

,並調用相同的方法這樣不再需要編寫ŧ他在我的託管bean的第一個版本中運行()方法。

這在我看來,第一種方法會更容易些,同時因爲在重構Java類的IDE支持重構,但它讓我寫它僅作爲一個平均傳達一個簡單的方法,同時參數。

哪一個更好?

回答

1

我認爲這個問題沒有直接的答案。該方法應基於我們的要求。兩者都有自己的優點和缺點。

但我可以說的一件事是: - 你的第一種方法更可行。因爲在你的第二種方法中,你應該在b中引用b,除非真的需要,否則不需要[A不需要知道B,如果是獨立實體]。並且您可以從彈簧容器中獲取B的實例(由於您可以避免在應用程序中使用B的重複實例)提供了B不在視圖範圍內。

而第二個問題是當你使用a.b.method時,我們應該確保b在任何時間點都不能爲空。當我們在一個html中有不同的實體引用時,應用程序將緊密耦合。而且,如果您有任何計劃將其用作通用html,則不能將其與任何其他實體一起使用。

希望我用我的解釋清楚。

+0

如果我使用第一種方法,是否必須確保b不應該爲空? 另外假設你從彈簧上下文獲取依賴這樣 '<號碼:的commandButton的ActionListener = 「#{b.methodCall(B.O)}」/>' 可以你重新評估? – 2013-02-22 09:32:33