#java #jsf #jsf-2 #primefaces #xhtml
#java #jsf #jsf-2 #простые интерфейсы #xhtml
Вопрос:
У меня есть первичное дерево на странице. Я сделал его составным компонентом. В основном он устанавливает свойство selectedNodeName для TreeBean. Я планирую использовать этот компонент дерева на разных страницах. Я пытаюсь использовать этот составной компонент на странице, когда составной компонент (представляющий собой первичное дерево) selectednode изменен h: outputText будет обновлен. Проблема здесь в том, что составной компонент управляется одним компонентом, а остальная часть страницы управляется другим компонентом. Свойство Component selectedNodeName находится в TreeBean, и я хочу использовать это свойство в SomeBean, чтобы я мог обновить значение h:outputText из SomeBean. По сути, я хочу получить selectedNodeName из 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 всегда равно 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. Но я хочу, чтобы оба компонента были просмотрены. Что мне делать? Что-то не так с моим подходом к составным компонентам?
Ответ №1:
Попробуйте установить весь компонент в качестве управляемого свойства. Некоторое время назад у меня были те же проблемы. Это решило проблему для меня:
@ManagedProperty(value="#{treeBean}")
private TreeBean treeBean;
public String getTreeBean() {
return treeBean;
}
public void setTreeBean(TreeBean treeBean) {
this.treeBean= treeBean;
}
Затем вы также можете получить доступ ко всем свойствам TreeBean в SomeBean.
Удачи!
Комментарии:
1. похоже, я не могу использовать свойство компонента в качестве управляемого свойства.