我正在阅读整个introduction,以了解何时以及为什么应该选择特定的Scope,对于静态字段和方法来说很清楚,但是对于Bean本身的对象而言,至少对我来说不是。
Bean1:
@ManagedBean
@SessionScoped
public class ConsultBean implements java.io.Serializable {
public String name="oldName";
public String getResults(){
return "index";
}
..
Bean2:
@ManagedBean
@SessionScoped
public class TestBean implements java.io.Serializable {
public ConsultBean obj=new ConsultBean();
public String show(){
obj.setName("newName");
return obj.getResults();
}
..
index.jspx / xhtml
<h:panelGrid columns="2">
<h:outputText value="Result:"/>
<h:outputText value="#{consultBean.name}"/>
</h:panelGrid>
结果是:
oldName
!但当:
public String getResults(){
this.setName("New Name")
return "index";
}
结果仍然是:
oldName
!发起呼叫的对象有关系吗?
最佳答案
问题是public ConsultBean obj=new ConsultBean();
,您不应该实例化托管bean。框架的工作就是为您完成,这就是托管bean的全部重点。
用ManagedProperty注入ConsultBean
。
虽然,我建议您使用CDI代替旧的jsf bean API