在一页中使用2 Bean

时间:2014-06-23 15:01:47

标签: java jsf jsf-2 primefaces xhtml

我在页面中有一个primeface树。我把它做成了复合组件。基本上它设置TreeBean的 selectedNodeName 属性。我计划在不同的页面中使用这个树组件。我试图在复合组件(这是一个主要树)selectednode改变时在页面中使用这个复合组件h:outputText将被更新。这里的问题是复合功能由一个bean管理,页面的其余部分由另一个bean管理。组件selectedNodeName属性位于 TreeBean 中,我想在 SomeBean 中使用此属性,因此我可以从 SomeBean 更新h:outputText值。基本上我想从 TreeBean 获取 selectedNodeName ,并在 SomeBean 中使用它。

<div id="somediv" >
    <h:outputText id="thisis" value="#{someBean.selectedNodeName}"/>
</div>


<cc:someComponent updateButton=":mainForm:treeComponent:someTree :mainForm:thisis"
id="treeComponent" updateAjax=":mainForm:thisis" />

我尝试了托管财产,但没有成功。 selectedNodeName属性始终为null,从不设置为treeBean的属性selectedNodeName。

    @ManagedProperty(value="#{treeBean.selectedNodeName}")
    private String selectedNodeName; 

    public String getSelectedNodeName() {
    return selectedNodeName;
    }

    public void setSelectedNodeName(String selectedNodeName) {
    this.selectedNodeName= selectedNodeName;
    }

所以我尝试了另一种方法。

private String selectedNodeName; 

public String getSelectedNodeName() {
    String tmp = (String)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("selectedNodeName"); 
    selectedNodeName = tmp;
    return nodename;
}

public void setSelectedNodeName(String selectedNodeName) {
    this.selectedNodeName= selectedNodeName;
}

此方法仅在 TreeBean 是sessioncoped并且 SomeBean 是视图目录时才有效。但我希望两个bean都是视图。我该怎么办?我的复合组件方法有问题吗?

1 个答案:

答案 0 :(得分:0)

尝试将整个bean设置为托管属性。我刚才有同样的问题。这确实为我解决了这个问题:

@ManagedProperty(value="#{treeBean}")
private TreeBean treeBean; 

  public String getTreeBean() {
     return treeBean;
  }

  public void setTreeBean(TreeBean treeBean) {
     this.treeBean= treeBean;
  }

然后你可以在SomeBean中访问TreeBean的所有属性。 祝你好运!