私は解決策を見つけたと信じています。ここにあります:
1 - tree.xhtml には、ノード タイプごとにtreeNode要素を持つツリー要素を含める必要がありました。
<p:tree id="treeSingle"
value="#{treeBean.root}"
var="node"
selectionMode="single"
selection="#{treeBean.selectedNode}"
dynamic="true"
style="width:98%;height:100%;">
<p:treeNode type="#{treeBean.LEAF_TYPE}">
<h:outputText value="#{node}" />
</p:treeNode>
<p:treeNode type="#{treeBean.ACTION_TYPE}">
<h:outputText value="#{node}" />
</p:treeNode>
<p:treeNode type="#{treeBean.VALUE_TYPE}">
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
2 - 次に、tree.xhtml で、次のように各ノード タイプのメニューも定義する必要がありました。
<p:contextMenu for="treeSingle" nodeType="#{treeBean.LEAF_TYPE}">
<p:menuitem value="View" actionListener="#{treeBean.displaySelectedSingle}" icon="ui-icon-search" update=":infoMessages"/>
<p:menuitem value="Delete" update="treeSingle" actionListener="#{treeBean.deleteNode}" icon="ui-icon-close"/>
</p:contextMenu>
<p:contextMenu for="treeSingle" nodeType="#{treeBean.ACTION_TYPE}">
<p:menuitem value="Execute" actionListener="#{treeBean.execute}" update=":infoMessages"/>
</p:contextMenu>
<p:contextMenu for="treeSingle" nodeType="#{treeBean.VALUE_TYPE}">
<p:menuitem value="Edit" actionListener="#{treeBean.edit}" icon="ui-icon-edit" update=":infoMessages"/>
<p:menuitem value="Delete" update="treeSingle" actionListener="#{treeBean.deleteNode}" icon="ui-icon-close"/>
</p:contextMenu>
3 - 次に、私の TreeBean で、次のようなプロパティを公開しました。
private static final String LEAF_TYPE = "leaf";
private static final String ACTION_TYPE = "action";
private static final String VALUE_TYPE = "value";
public String getLEAF_TYPE(){
return LEAF_TYPE;
}
public String getACTION_TYPE(){
return ACTION_TYPE;
}
public String getVALUE_TYPE(){
return VALUE_TYPE;
}
4 - 最後に TreeBean で、次のようなノードを作成しました。
TreeNode node = new DefaultTreeNode(ACTION_TYPE, data, parentNode);
TreeNode node = new DefaultTreeNode(LEAF_TYPE, data, parentNode);
TreeNode node = new DefaultTreeNode(VALUE_TYPE, data, parentNode);