我在运行时在Wicket中创建新选项卡时出现问题。当我在AjaxTabbedBar的Tabs列表中添加一个新选项卡时,我在屏幕上看不到任何更改,也许你可以帮助我?
ExamplePage扩展网页:
private AjaxTabbedPanel<AbstractTab> myTabBar;
tabs = new ArrayList<AbstractTab>();
tabs.add(new AbstractTab(new Model<String>("Übersicht")) {
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(String panelId) {
if (myOverviewTab == null) myOverviewTab = new OverviewTab(panelId, getInstance());
return myOverviewTab;
}
});
tabs.add(new AbstractTab(new Model<String>("Details")) {
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(String panelId) {
if (myDetailTab == null) myDetailTab = new DetailTab(panelId);
return myDetailTab;
}
});
myTabBar = new AjaxTabbedPanel<AbstractTab>("tabs", tabs);
add(myTabBar);
这是我在开始时创建标签的地方,这是我的Runtimeaddition
public void newDetailTab(AjaxRequestTarget target){
System.out.println("newDetailtab");
tabs.add(new AbstractTab(new Model<String>("Details")) {
private static final long serialVersionUID = 1L;
@Override
public Panel getPanel(String panelId) {
return new DetailTab(panelId);
}
});
myTabBar.setSelectedTab(myTabBar.getSelectedTab()+1);
target.add(myTabBar);
}
所以在最后一行我想改变我的实际标签,但实际上它不起作用。让我想知道的是,第一个标签的数字是-1(myTabBar.getSelectedtTab()),这是一个错误吗?
我还尝试使用AjaxRequestTarget更新我的tabbar,但是出现了不同的错误:在尝试执行时找不到更新页面或ID为[[tabs28]]的Component ...
希望你能帮助我。
编辑:我在google上发现了一些有类似问题的人,他们试图使用LoadabledetachableModel ...我只是不知道如何包含这个因为它的摘要,我真的不知道如何填写这些模型想要的方法使用......答案 0 :(得分:1)
所以,我明白了......最后我不得不使用来自其他类的函数的AjaxRequestTarget来直接刷新它......当我把它作为参数给出时,似乎有一个错误。我认为这是重点,但我并不完全确定,因为我改变了很多:)
答案 1 :(得分:0)
通常,您应该添加新选项卡,然后使用AjaxRequestTarget更新整个AjaxTabbedPanel。
“无法更新id = XY的组件”大部分时间都表示您在尝试通过ajax更新的组件上缺少setOutputMarkupPlaceholderTag(true)
。
答案 2 :(得分:0)
TabbedPanel以其所选标签的-1开头。在退出时,它将自动选择第一个可见选项卡。
在我看来,你正在#newDetailTab()中使用新的TabbedPanel实例。