Wicket在运行时创建新选项卡

时间:2013-12-10 11:23:17

标签: ajax tabs runtime wicket

我在运行时在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 ...我只是不知道如何包含这个因为它的摘要,我真的不知道如何填写这些模型想要的方法使用......

3 个答案:

答案 0 :(得分:1)

所以,我明白了......最后我不得不使用来自其他类的函数的AjaxRequestTarget来直接刷新它......当我把它作为参数给出时,似乎有一个错误。我认为这是重点,但我并不完全确定,因为我改变了很多:)

答案 1 :(得分:0)

通常,您应该添加新选项卡,然后使用AjaxRequestTarget更新整个AjaxTabbedPanel。

“无法更新id = XY的组件”大部分时间都表示您在尝试通过ajax更新的组件上缺少setOutputMarkupPlaceholderTag(true)

答案 2 :(得分:0)

TabbedPanel以其所选标签的-1开头。在退出时,它将自动选择第一个可见选项卡。

在我看来,你正在#newDetailTab()中使用新的TabbedPanel实例。