Inplace in Tree:如何保存修改后的TreeNode?

时间:2014-01-22 15:04:42

标签: jsf jsf-2 primefaces tree inplace-editing

我正在使用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允许我访问org.primefaces.component.tree.UITreeNode,但不能访问保存我数据的org.primefaces.model.TreeNode。是否有从TreeNodeAjaxBehaviorEvent的解决方案?谢谢!

1 个答案:

答案 0 :(得分:2)

只需将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>

在你的bean中:

public void onSaveNodeLabel(String nodeLabel) {
    //
}