我使用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;
}
AreaTreeNode
和EquipmentTreeNode
都来自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
。我错过了什么吗?
答案 0 :(得分:1)
p:treeTable
有两个非常相似的属性。并且文档对差异并不清楚:
var 以前使用的请求范围变量的名称 参考每个treenode。
nodeVar 请求范围的变量的名称 曾经使用EL来引用当前的treenode。
根据我使用PrimeFaces 5.3的经验var
是指通过TreeNode.getData()
可以回复的数据模型对象,而nodeVar
是指实际的TreeNode
实例。也许你可以使用后者并在你的编辑方法中打开你的bean?