Внутри дерева: как сохранить измененный TreeNode?
Я использую Primefaces 4.0, и у меня есть <p:tree>
с редактируемыми метками узлов:
<p:tree id="treeSingle" dynamic="true"
value="#{treeController.treeRoot}" var="node"
selectionMode="single" selection="#{treeController.selectedNode}">
<p:treeNode>
<p:inplace editor="true" event="dblclick">
<p:ajax event="save" listener="#{treeController.onSaveNodeLabel}" update="@this" />
<p:inputText value="#{node.label}" />
</p:inplace>
</p:treeNode>
</p:tree>
Я хочу сохранить значение #{node.label}, когда оно будет изменено пользователем.
listener="#{treeController.onSaveNodeLabel}"
вызывает метод, который должен сохранить измененный TreeNode
этикетка. Итак, я создал этот метод в моем treeController
учебный класс:
public void onSaveNodeLabel(AjaxBehaviorEvent event) {
logger.info("onSaveNodeLabel");
Inplace inplace = (Inplace)event.getSource();
UITreeNode uiTreeNode = (UITreeNode) inplace.getParent();
// What next?
}
Проблема: AjaxBehaviorEvent
позволяет мне получить доступ к http://www.primefaces.org/docs/api/4.0/org/primefaces/component/tree/UITreeNode.html, но не к org.primefaces.model.TreeNode, который содержит мои данные. Есть ли решение, чтобы добраться до TreeNode
от AjaxBehaviorEvent
? Спасибо!
1 ответ
Просто отправьте node.label в качестве параметра вашей функции:
#{treeController.onSaveNodeLabel(node.label)}
Итак, на вашей веб-странице:
<p:inplace editor="true" event="dblclick">
<p:ajax event="save" listener="#{treeController.onSaveNodeLabel(node.label)}" update="@this" />
<p:inputText value="#{node.label}" />
</p:inplace>
И в вашем бобе:
public void onSaveNodeLabel(String nodeLabel) {
//
}