У меня всегда есть проблемы с простым вызовом Component.replaceWith (). Так как я делаю это с AJAX, мне всегда нужно вызывать target.add ().
Мое решение на данный момент состоит в том, чтобы класс MyTree расширял LinkTree и в этом классе переопределял newNodeComponent ().
Поскольку в моем приложении все происходит с IndexPage.class, и там я просто заменяю компоненты, я добавил метод handleSelection () в IndexPage.Class (расширяет BasePage, расширяет веб-страницу). Там я решаю, основываясь на выбранном объекте nodeObject, как заменить компонент в IndexPage
Public Class MyTree extends Linktree{
protected Component newNodeComponent(String id, IModel<Object> model) {
@Override
protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) {
super.onNodeLinkClicked(node, tree, target);
((IndexPage)getPage()).handleSelection(target, (TreeNode)node);
}
@Override
protected ResourceReference getResourceFolderOpen(Object node) {
return getResourceForNode(node);
}
@Override
protected ResourceReference getResourceFolderClosed(Object node) {
return getResourceForNode(node);
}
@Override
protected ResourceReference getResourceItemLeaf(Object node) {
return super.getResourceItemLeaf(node);
}
@Override
protected ResourceReference getImageResourceReference(BaseTree tree, Object node) {
return getResourceForNode(node);
}
}
}
Надеюсь, это объяснимо, иначе: нужны вопросы или комментарии!