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

Jsf 当从ManagedBean中预先选择节点时,如何获取p:tree中的选定节点?,jsf,primefaces,Jsf,Primefaces,在我的应用程序中,我在selectionMode:复选框中使用p:树。代码如下: <p:tree id="tree_permissoes" value="#{mBTipoUsuario.root}" var="node" selectionMode="checkbox" selection="#{mBTipoUsuario.selectedNodes} widgetVar="treeSingleWidget""> <p:treeNode> <

在我的应用程序中,我在selectionMode:复选框中使用p:树。代码如下:

<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:树。然后,用户可以在p:树中选择一些其他节点,并提交回托管bean。问题是,在mBTipoUsuario.selectedNodes数组中,我只得到用户显式检查的节点,但没有找到从托管bean中预先选择的节点

问题是:如何同时获得托管bean中的预选节点和用户显式选择的节点

我已经尝试在客户端选择要预选的节点,如下所示:

但我没有成功。有人能帮我吗?
谢谢。

我已经解决了我的问题。以下是未来读者的解决方案。可以从客户端检查节点。这种方法可以正确地恢复托管bean中的所有节点,甚至是应用程序预先选择的节点,因为我们从客户端检查它们

执行此操作的解决方案如下所示:

但是在我们的例子中,我们不想选择节点,我们想检查它们,所以我们可以使用函数“toggleCheckboxNode”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());