Java 方法调用的ManagedBean和xhtml设计策略

Java 方法调用的ManagedBean和xhtml设计策略,java,jsf,Java,Jsf,假设我有一个这样的类: @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

假设我有一个这样的类:

@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()}" />
并像这样调用相同的方法,从而无需在托管bean的第一个版本中编写operation()方法

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

在我看来,第一种方法在重构时会更容易,因为ide支持重构java类,但同时它使我编写了一个简单的方法,它只作为传递参数的手段


哪个方法更好?

我认为这个问题没有直接的答案。该方法应基于我们的要求。两者各有利弊

但我可以说的是:-你的第一种方法更可行。因为在第二种方法中,你应该在a中有一个b的参考,除非确实需要,否则这是不需要的[a不需要知道b,如果be是一个独立实体]。如果B不在视图范围内,则可以从spring容器中获取B的实例(这样可以避免应用程序中重复的B

第二个问题是,当您使用a.b.方法时,我们应该确保b在任何时候都不能为null。当我们在一个html中有不同的实体引用时,应用程序将紧密耦合。如果您打算将html用作通用html,则不能将其与任何其他实体一起使用


希望我的解释清楚。

如果我也使用第一种方法,我不需要确保b不应该为null吗?同样假设您从spring上下文中获得了依赖项,比如
,您可以重新计算吗?
<p:commandButton actionListener="#{a.b.methodCall(b.o)}" />