【问题标题】:Using 2 Bean in One Page在一页中使用 2 个 Bean
【发布时间】:2024-01-08 01:54:01
【问题描述】:

我在一个页面中有一个 primeface 树。我把它做成复合组件。基本上它设置了 TreeBean 的 selectedNodeName 属性。我计划在不同的页面中使用这个树组件。当复合组件(它是一个primeface树)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 是 sessionscoped 并且 SomeBean 是 viewscoped 时才有效。但我希望两个 bean 都被视域化。我该怎么办?我的复合组件方法有问题吗?

【问题讨论】:

    标签: java jsf jsf-2 primefaces xhtml


    【解决方案1】:

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

    @ManagedProperty(value="#{treeBean}")
    private TreeBean treeBean; 
    
      public String getTreeBean() {
         return treeBean;
      }
    
      public void setTreeBean(TreeBean treeBean) {
         this.treeBean= treeBean;
      }
    

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

    【讨论】:

    • ty 看起来我不能使用 bean 的属性作为托管属性。
    最近更新 更多