p:treeTable不在子节点上发送

时间:2016-04-22 08:13:35

标签: jsf jsf-2 primefaces

我使用PrimeFaces p:treeTable

root
  Area
    Equipment 1
    ...
    Equipment n
  Area 2
    Equipment 1
    ...
    Equipment n
public TreeNode getRoot() {
    DefaultTreeNode root = new DefaultTreeNode("Root", null);
    for (Area area : areas) {
        TreeNode areaNode = new DefaultTreeNode("area", new AreaTreeNode(area), root);
        root.getChildren().add(areaNode);
        for (Equipment e : equipments) {
            TreeNode eNode = new DefaultTreeNode("equipment", new EquipmentTreeNode(e), areaNode);
            areaNode.getChildren().add(eNode);
        }
    }
    return root;
}

AreaTreeNodeEquipmentTreeNode都来自MipTreeNode,它只是一个可序列化的bean。

在我的.xhtml文件中,我定义:

<p:treeTable value="#{equipmentsView.root}" var="node" selectionMode="single">
    <p:column headerText="Name">
        <h:outputText value="#{node.name}" />
    </p:column>
    <p:column>
        <p:commandLink value="edit" actionListener="#{equipmentsView.edit(node)}" />
    </p:column>
</p:treeTable>

因此,当我单击commandLink时,我想用当前节点调用edit方法:

public void edit(final MipTreeNode n) {
    System.out.println(n);
}

我的问题是上述方法仅针对AreaTreeNode而不针对EquipmentTreeNode。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

p:treeTable有两个非常相似的属性。并且文档对差异并不清楚:

  

var 以前使用的请求范围变量的名称   参考每个treenode。

     

nodeVar 请求范围的变量的名称   曾经使用EL来引用当前的treenode。

根据我使用PrimeFaces 5.3的经验var是指通过TreeNode.getData()可以回复的数据模型对象,而nodeVar是指实际的TreeNode实例。也许你可以使用后者并在你的编辑方法中打开你的bean?