2013-12-10 91 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