【发布时间】: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