【问题标题】:Primefaces tree with checkbox mode - setting multiple child nodes from Managed Bean具有复选框模式的 Primefaces 树 - 从托管 Bean 设置多个子节点
【发布时间】:2016-03-28 10:09:02
【问题描述】:

我想在同一个父节点下设置多个子节点被选中或选中。我看到了这个答案:https://stackoverflow.com/a/17025086/1297935 并尝试了以下方法,但它不起作用:

@ManagedBean
@ViewScoped
public class BackingBean extends GenericViewBean {

        private TreeNode[] selectedNodes;

        public void showChildSelected(){
             ...
             ...
             selectedNodes = new TreeNode[]{p1child1,p1child2}; //two child nodes of same parent added
             ...
             ...
             for(TreeNode treeNode : selectedNodes){
                 treeNode.setSelected(true);
             }
             RequestContext.getCurrentInstance().update("listView:tree");
        }

}

上面的代码只显示最后一个选中/选中的孩子。是否有任何解决方案可以从托管 Bean 中选择同一父级的多个子节点? 提前致谢。

【问题讨论】:

  • 也许this 会有所帮助。如果您只想要特定的节点和子节点,请在您的情况下执行一些 if 条件。
  • @Geinmachi - 我认为你指出的代码做同样的事情,行 treeNode.setSelected(true);实际选择节点。问题是它没有显示两个子节点,只选择了 TreeNode[] 数组中的最后一个。

标签: jsf primefaces


【解决方案1】:

我认为这似乎是 Primefaces 中的一些错误,因为托管 Bean 中的 TreeNode[] selectedNodes 正确显示了 2 个选定节点,但在 Javascript 对象 PrimeFaces.widgets.treeWidget.selections 数组中仅显示一个 rowKey。仅在选择2个相同父母的子项时才发生这种情况。即使在托管 Bean 中使用 setSelected(true) 手动选择树节点后,行为也没有变化。

目前我正在使用 alexSunder 发布的 Javascript 解决方法:https://stackoverflow.com/a/25716716,在他的帖子中他使用 PrimeFaces.widgets.treeWidget.selectNode(node,silent) 但我查看了 tree.js 并获得了另一种方法对于复选框:PrimeFaces.widgets.treeWidget.toggleCheckboxNode(node)。以下是我所做的更改,它正在工作!

@ManagedBean
@ViewScoped
public class BackingBean extends GenericViewBean {

        private TreeNode[] selectedNodes;

        public void showChildSelected(){
             ...
             ...
             selectedNodes = new TreeNode[]{p1child1,p1child2}; //two child nodes of same parent added
             ...
             ...
             for(TreeNode treeNode : selectedNodes){
                 StringBuilder sb = new StringBuilder();
                 sb.append("PrimeFaces.widgets.treeWidget.toggleCheckboxNode(");
                 sb.append("$(\"#listView\\\\:tree\\\\:");
                 sb.append(treeNode.getRowKey());
                 sb.append("\"))");
                 RequestContext.getCurrentInstance().execute(sb.toString());
             }
             RequestContext.getCurrentInstance().update("listView:tree");
        }

}

方法说明:
PrimeFaces.widgets.treeWidget.selectNode(node,silent):silent boolean 参数传递为false时,不会触发节点选择事件,但不会改变复选框状态,只会选择/突出显示节点。

PrimeFaces.widgets.treeWidget.toggleCheckboxNode(node):复选框状态随着节点的选择而切换,然后节点选择事件被触发。

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多