【问题标题】:How to add onclick selection to rows of wicket TreeTable?如何将 onclick 选择添加到 wicket TreeTable 的行?
【发布时间】:2023-04-07 14:21:02
【问题描述】:

我正在使用 TreeTable(来自 wicket-extensions),我希望能够通过单击其中的任意位置来选择一行,而不是单击一个单元格中的链接来选择行的通常行为。我知道这应该可以通过向表示行的组件添加 AjaxEventBehavior("onclick") 来实现,但我似乎找不到任何暴露行组件的方法。

【问题讨论】:

    标签: java ajax wicket


    【解决方案1】:

    后来我想出了一个解决方案。行元素在TreeTablepopulateTreeItem 方法中可用。当你创建你的树表时,像这样覆盖这个方法:

    @Override
    protected void populateTreeItem(final WebMarkupContainer item, final int level) {
        super.populateTreeItem(item, level);
        item.add(new AjaxEventBehavior("onclick") {
            @Override
            protected void onEvent(final AjaxRequestTarget target) {
                final TreeNode node = ((TreeNode) item.getDefaultModelObject());
                rowClickSelect(node);
            });
        }
    };
    

    通常用于向行添加行为。就我而言,我将不得不做一些更重要的事情来协调这种点击切换行为与应该展开/收缩节点的点击以及链接点击。

    在这些情况下再次切换选择会产生短暂切换节点进出不需要的状态的不幸效果,这是不理想的。相反,覆盖onJunctionLinkClickedonNodeLinkClicked 方法,在到达我们刚刚在populateTreeItem 中设置的onClick 行为之前,点击事件将触及这些方法:

    @Override
    protected void onJunctionLinkClicked(final AjaxRequestTarget target, final TreeNode node) {
        super.onJunctionLinkClicked(target, node);
        skipNextRowClick();
    }
    
    @Override
    protected void onNodeLinkClicked(final AjaxRequestTarget target, final TreeNode node) {
        super.onNodeLinkClicked(target, node);
        skipNextRowClick();
    }
    

    最后,添加方法skipNextRowClickrowClickSelect

    /**
     * Ensure the next call to rowClickSelect() will have no effect.
     */
    private void skipNextRowClick() {
        this.skipNextClickSelect = true;
    }
    
    private void rowClickSelect(final TreeNode node) {
        if (this.skipNextClickSelect) {
            this.skipNextClickSelect = false;
            return;
        }
        // select on click row
        final boolean isSelected = Log4jPanel.this.treeTable.getTreeState().isNodeSelected(node);
        treeTable.getTreeState().selectNode(node, !isSelected);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2021-06-20
      相关资源
      最近更新 更多