在我的应用程序中,我在selectionMode:复选框中使用p:tree。代码如下:
<p:tree id="tree_permissoes" value="#{mBTipoUsuario.root}" var="node" selectionMode="checkbox" selection="#{mBTipoUsuario.selectedNodes} widgetVar="treeSingleWidget"">
<p:treeNode>
<h:outputText value="#{node}"/>
</p:treeNode>
我在“mBTipoUsuario.selectedNodes”数组中获取所选节点时遇到一些问题。当用户单击某个按钮时,我使用托管bean中的一些预先选择的节点加载p:tree。然后,用户可以在p:树中选择他们选择的一些其他节点并提交回托管bean。问题是,在“mBTipoUsuario.selectedNodes”数组中,我只获取用户明确检查的节点,但是错过了从托管bean中预先选择的节点。
问题是:如何同时获取托管bean中预先选择的节点以及用户明确选择的节点?
我已经尝试在客户端选择我想要预先选择的节点,如下所示:PrimeFaces Tree component, setting selected node from managed bean
但我没有任何成功。谁能帮我? 感谢。
答案 0 :(得分:2)
我已经解决了我的问题。这是未来读者的解决方案。可以从客户端检查节点。这种方式可以在托管bean中正确恢复所有节点,甚至是应用程序预先选择的节点,因为我们从客户端检查它们。
此处显示了执行此操作的解决方案:PrimeFaces Tree component, setting selected node from managed bean
但在我们的情况下,我们不想选择节点,我们想要检查它们,因此我们可以使用函数&#39; toggleCheckboxNode&#39; istead。
最终代码是:
StringBuilder sb = new StringBuilder();
sb.append("PrimeFaces.widgets.treeSingleWidget.toggleCheckboxNode(");
sb.append("$(\"#frm_edit\\\\:tree_permissoes\\\\:");
sb.append(root.getChildren().get(i).getChildren().get(k).getRowKey());
sb.append("\")");
sb.append(", true)");
RequestContext.getCurrentInstance().execute(sb.toString());