TreeTable (wicket-extensions)에서 작업하고 있는데 행을 선택하기 위해 하나의 셀에서 링크를 클릭하는 일반적인 동작 대신 그 안에 아무 곳이나 클릭하여 행을 선택할 수 있기를 원합니다. 이 행을 나타내는 구성 요소에 AjaxEventBehavior ("onclick") 추가하여 가능해야 함을 이해하지만 행 구성 요소가 노출 된 메서드를 찾을 수 없습니다.wicket TreeTable의 행에 onclick 선택을 추가하는 방법?
4
A
답변
7
나는 해결책을 찾아 냈다. 행 요소는 TreeTable
에서 populateTreeItem
메서드로 사용할 수 있습니다. 당신이 당신의 트리 테이블을 만들 때,이 방법과 같이 오버라이드 (override) : 행에 동작을 추가하는
@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);
});
}
};
일반적으로 유용합니다. 필자의 경우이 노드를 확장/계약하기로되어있는 클릭과 링크 클릭으로이 토글 온 클릭 동작을 조화시키기 위해 좀 더 오버 라이딩해야 할 것입니다.
이러한 경우 선택을 다시 선택하기 만하면 노드가 원하지 않는 상태로 들어갔다 나오는 노드를 간단히 전환하는 것이 좋지 않습니다. 이는 바람직하지 않습니다.
: 마지막으로@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
추가 : 그것은 populateTreeItem
에서 우리가 설정이 onClick
행동에 도달하기 전에 대신, 클릭 이벤트에 감동 될 onJunctionLinkClicked
및 onNodeLinkClicked
방법을 오버라이드 (override)
/**
* 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);
}