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)}" />