我在运行时在Wicket中创建新标签时遇到了问题。当我添加一个新选项卡到我的Ajax TabbedBar的选项卡列表中时,我没有看到屏幕上有任何更改,也许你可以帮助我?Wicket在运行时创建新标签
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]没有被发现,同时尝试执行...
希望你可以帮我。
编辑:我发现一些人在谷歌上有一个类似的问题,他们试图使用LoadabledetachableModel ...我真的不知道如何包括这个,因为它的抽象,我真的不知道如何填补这些模型的方法想要使用...
hm我将setOutputMarkupPlaceholderTag(true)添加到myTabBar,但没有任何更改,同样的错误... – RichieK
关于ajaxrequesttarget的一个问题:我也试图通过参数,而我呼吁这个函数,因为我称这个函数有一个目标作为参数...有没有办法创建一个新的目标? Ajaxrequesttarget.get()在这里不起作用,因为我使用了wicket 6.11 – RichieK
AjaxRequesttargets(ART)在使用它的方法中可用。这意味着你不应该试图从静态方法中“获得”ART,而应该从覆盖的方法参数中获得ART。然后向目标添加需要更新的所有组件。如果组件在调用时不可见(不在标记中),则需要使用上述方法生成占位符,以使wicket能够找到组件。 – thg