2013-12-10 58 views
1

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

回答

1

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

0

通常应该添加新选项卡,然后用ajaxrequesttarget更新整个Ajax TabbedPanel。 “无法更新id = XY的组件”大多数情况下都需要您对要通过ajax尝试更新的组件调用setOutputMarkupPlaceholderTag(true)。

+0

hm我将setOutputMarkupPlaceholderTag(true)添加到myTabBar,但没有任何更改,同样的错误... – RichieK

+0

关于ajaxrequesttarget的一个问题:我也试图通过参数,而我呼吁这个函数,因为我称这个函数有一个目标作为参数...有没有办法创建一个新的目标? Ajaxrequesttarget.get()在这里不起作用,因为我使用了wicket 6.11 – RichieK

+0

AjaxRequesttargets(ART)在使用它的方法中可用。这意味着你不应该试图从静态方法中“获得”ART,而应该从覆盖的方法参数中获得ART。然后向目标添加需要更新的所有组件。如果组件在调用时不可见(不在标记中),则需要使用上述方法生成占位符,以使wicket能够找到组件。 – thg

0

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

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

+0

你确定吗?因为我只是创建tabBar一次...当我看着调试输出比较myTabBar中添加前后的标签,它看起来是正确的...我认为问题是pagerefresh,所以我试图做到这一点与ajaxrequesttarget,但我只是得到这些错误... – RichieK

+0

嗯,我想到了这些实例,也许你是对的,我不知道java是如何处理这个的:我从这个类的TreeTable.java调用一个本身的singleton参数,#newDetailtab从TreeTable调用...在我的脑海里这应该是正确的,也许Java以另一种方式解释这个......? – RichieK