我在页面中有一个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都是视图。我该怎么办?我的复合组件方法有问题吗?
答案 0 :(得分:0)
尝试将整个bean设置为托管属性。我刚才有同样的问题。这确实为我解决了这个问题:
@ManagedProperty(value="#{treeBean}")
private TreeBean treeBean;
public String getTreeBean() {
return treeBean;
}
public void setTreeBean(TreeBean treeBean) {
this.treeBean= treeBean;
}
然后你可以在SomeBean中访问TreeBean的所有属性。 祝你好运!