我正在使用TreeTable(来自wicket扩展),我希望能够通过单击其中的任何位置来选择行,而不是通常单击一个单元格中的链接来选择行.我理解这应该可以通过向表示行的组件添加AjaxEventBehavior(“onclick”)来实现,但我似乎无法找到暴露行组件的任何方法.
解决方法:
之后我想出了一个解决方案. row元素在TreeTable的populateTreeItem方法中可用.当您创建treetable时,请覆盖此方法,如下所示:
@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行为之前,click事件将触及这些方法:
@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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。