当从ManagedBean中预先选择时,如何在p:tree中获取所选节点?

时间:2015-05-26 13:31:13

标签: jsf primefaces

在我的应用程序中,我在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

但我没有任何成功。谁能帮我? 感谢。

1 个答案:

答案 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());