Внутри дерева: как сохранить измененный 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) {
    //
}
Другие вопросы по тегам