Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将onclick选择添加到wicket树表的行中?_Java_Ajax_Wicket - Fatal编程技术网

Java 如何将onclick选择添加到wicket树表的行中?

Java 如何将onclick选择添加到wicket树表的行中?,java,ajax,wicket,Java,Ajax,Wicket,我正在使用一个树表(来自wicket extensions),我希望能够通过单击其中的任意位置来选择一行,而不是像通常那样单击一个单元格中的链接来选择该行。我知道这应该可以通过向表示行的组件添加AjaxEventBehavior(“onclick”)来实现,但我似乎找不到任何暴露行组件的方法。行元素可在TreeTable中的populateTreeItem方法中使用。创建树表时,请按如下方式重写此方法: @Override protected void populateTreeItem(fina

我正在使用一个树表(来自wicket extensions),我希望能够通过单击其中的任意位置来选择一行,而不是像通常那样单击一个单元格中的链接来选择该行。我知道这应该可以通过向表示行的组件添加AjaxEventBehavior(“onclick”)来实现,但我似乎找不到任何暴露行组件的方法。行元素可在
TreeTable
中的
populateTreeItem
方法中使用。创建树表时,请按如下方式重写此方法:

@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);
        });
    }
};
通常用于向行添加行为。在我的例子中,我必须做更多的重写来协调这个点击切换行为和应该展开/收缩节点的点击以及链接点击

在这些情况下,只需再次切换选择就会产生不幸的效果,即短暂地将节点切换到不需要的状态,这是不理想的。相反,重写
onJunctionLinkClicked
onNodeLinkClicked
方法,在到达我们刚刚在
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();
}
最后,添加方法
skipNextRowClick
rowClickSelect

/**
 * 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);
}