范围如何影响Bean的对象?

时间:2018-11-27 15:35:52

标签: java jsf

我正在阅读整个introduction,以了解何时以及为什么我们应该选择特定的范围,对于静态字段和方法来说很明显,但是对于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";  
    }

结果为STILL:oldName !!

发起呼叫的对象重要吗?

1 个答案:

答案 0 :(得分:2)

问题是public ConsultBean obj=new ConsultBean();,您不应实例化托管bean。框架的工作就是为您完成任务,这就是托管bean的全部重点。

ManagedProperty注入ConsultBean

尽管,我建议您使用CDI代替旧的jsf bean API