2014-01-22 4 views
1

Я использую Primefaces 4.0 и у меня есть <p:tree> с редактируемым узлом этикеткой:Внутри внутри Дерево: как сохранить измененный TreeNode?

<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, который держит свои данные. Есть ли решение добраться до TreeNode от AjaxBehaviorEvent? Благодаря!

+0

Вы хотите сохранить значение # {node.label}, не так ли? – Pellizon

+0

Да, точно. Я уточню свой вопрос. –

+1

Вы пытались передать значение узла методу? например: # {treeController.onSaveNodeLabel (node.label)}, а затем получить его в своем методе и сделать все, что вы хотите – Pellizon

ответ

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> 

И в вашем боба:

public void onSaveNodeLabel(String nodeLabel) { 
    // 
} 
+1

На самом деле то, что я сделал, больше похоже на 'onSaveNodeLabel (node.id, node.label)'. –

+1

Ницца! Вы также можете использовать 'onSaveNodeLabel (node)' и получить свойства узла в bean-компоненте :) – Pellizon

+0

Вы правы, это проще. Следует, однако, отметить, что атрибут '' var = "node" внутри '' не содержит ссылки на объект TreeNode, а ссылку на данные, содержащиеся в TreeNode (доступные с помощью 'TreeNode.getData() '). Следовательно, я переименовал свою переменную 'treeNodeData' вместо' node'. –