0

假设我有这样的课程:

@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 添加一个吸气剂:

public B getB() {
    return b;
}

并像这样调用相同的方法,从而无需在我的托管 bean 的第一个版本中编写 operation() 方法。

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

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

哪个是更好的方法?

4

1 回答 1

1

我认为这个问题没有直接的答案。该方法应基于我们的要求。两者都有自己的优点和缺点。

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

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

希望我的解释很清楚。

于 2013-02-22T06:56:52.673 回答