我在一页上有一棵原始的树。我做了复合组件。基本上它设置了selectedNodeName属性的TreeBean。我计划在不同的页面中使用这个树组件。当复合组件(这是一个原始的树)选择节点更改h:outputText将被更新时,我试图在页面中使用这个复合组件。这里的问题是复合compenent由一个bean管理,而页面的其余部分则由另一个bean管理。Components selectedNodeName属性位于TreeBean中,我希望在SomeBean中使用该属性,以便从SomeBean中更新h:outputText值。基本上,我想从TreeBean获得TreeBean并在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属性总是空的,从不设置为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是会话作用域,而SomeBean是视图范围时,这种方法才能起作用。但我希望这两个豆子都能被观察到。我该怎么办?我处理复合组件的方法有什么问题吗?
发布于 2014-06-24 06:12:27
尝试将整个bean设置为托管属性。不久前我也有过同样的问题。这确实解决了我的问题:
@ManagedProperty(value="#{treeBean}")
private TreeBean treeBean;
public String getTreeBean() {
return treeBean;
}
public void setTreeBean(TreeBean treeBean) {
this.treeBean= treeBean;
}然后,您也可以访问TreeBean在SomeBean中的所有属性。祝好运!
https://stackoverflow.com/questions/24369192
复制相似问题