我正在阅读整个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

09-28 12:48