2013-12-10 3 views
1

У меня возникла проблема с созданием новых вкладок в Wicket во время выполнения. Когда я добавляю новую вкладку в список вкладок моего AjaxTabbedBar, я не вижу никаких изменений на экране, может быть, вы можете мне помочь?Wicket Создать новые вкладки в Runtime

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()), это ошибка?

я также пытался обновить мой TabBar с AjaxRequestTarget, но приходят различные ошибки: не может обновить страницу или компонент с идентификатором [[tabs28]] не были найдено при попытке выполнить ...

Надеются, что вы может помочь мне.

Редактирование: Я нашел некоторых людей в Google с аналогичной проблемой, они попытались использовать LoadabledetachableModel ... Я просто не знаю, как включить это, потому что его абстрактный текст, и я действительно не знаю, как заполнить методы этой модели хочет использовать ...

ответ

1

Итак, я получил его ... Наконец, мне пришлось использовать AjaxRequestTarget из моей функции из другого класса, чтобы обновить его напрямую ... Когда я даю это как параметр, кажется, есть ошибка. Я думаю, что это точка, но я не совсем уверен, потому что я много изменил :)

0

Как правило, вы должны добавить новую вкладку, а затем обновить всю AjaxTabbedPanel с помощью ajaxrequesttarget. «Невозможно обновить компонент с id = XY» в большинстве случаев вам нужно вызвать setOutputMarkupPlaceholderTag (true) для компонента, который вы пытаетесь обновить с помощью ajax.

+0

hm Я добавил setOutputMarkupPlaceholderTag (true) в myTabBar, но ничего не изменилось, такая же ошибка ... – RichieK

+0

один вопрос об ajaxrequesttarget: i также пытался получить это через параметр, когда я вызываю эту функцию, потому что функция, где я называю это, имеет цель как параметр ... есть ли способ создать новую цель? Ajaxrequesttarget.get() не работает здесь, потому что я использую wicket 6.11 – RichieK

+0

AjaxRequesttargets (ART) доступны в методах, которые его используют. Это означает, что вы не должны пытаться «получить» АРТ от статического метода, а скорее от параметров перезаписанного метода. Затем вы добавляете к цели все компоненты, которые нуждаются в обновлении. если компонент невидим (не в разметке) во время вызова, вам нужно создать заполнители с вышеупомянутым методом, чтобы позволить калитки находить компоненты. – thg

0

TabbedPanel начинается с -1 для выбранной вкладки. При разрыве автоматически выбирается первая видимая вкладка.

Как мне кажется, вы работаете над новым экземпляром TabbedPanel в #newDetailTab().

+0

, вы уверены? потому что я просто создаю tabBar один раз ... когда я смотрю на вывод отладки, сравнивая вкладки в myTabBar до и после добавления, он выглядит правильно ... Я думаю, что проблема в pagerefresh, поэтому я попытался сделать это с помощью ajaxrequesttarget, но я просто получить эти ошибки ... – RichieK

+0

Хм, я думал об этих экземплярах, может быть, вы правы, я не знаю, как java справляется с этим: я вызываю из этого класса TreeTable.java с одним параметром singleton, #newDetailtab вызывается из TreeTable ... В моем сознании это должно быть правильно, может быть, Java интерпретирует это по-другому ...? – RichieK

Смежные вопросы