作用域如何影响Bean的对象



我阅读了整个介绍,以了解我们何时以及为什么应该选择特定的Scope,这对于静态字段和方法来说是清楚的,但对于Bean本身的对象来说不是,至少对我来说是这样。

Bean1:

@ManagedBean
@SessionScoped
public class ConsultBean   implements java.io.Serializable {
public  String name="oldName";

public String getResults(){
return "index";  
}
..

光束2:

@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

最新更新