2015-08-28 5 views
0

HTML-файл, который выглядит следующим образом:Wicket: Можно ли создать разметку перед инициализацией компонента java?

<wicket:panel> 
    <form wicket:id="adminUIForm"> 
     <table wicket:id="datatable" class="datatable"></table> 
     <div wicket:id="institutTablePanel"></div> 
    </form> 
</wicket:panel> 

Но в моем Java код, который я только хочу, чтобы создать экземпляр компонента institutTablePanel, когда строка в DataTable щелчке, так как конструктор выглядит следующим образом:

target.add(new InstitutTablePanel("institutLabelPabel", selectedContact)); 

И выбраноКонтакт не может быть пустым. Есть ли возможность сделать это, не получив ошибку, что она не может найти компонент в моем JavaCode?

Edit: Это может быть полезно

@Override 
protected Item<Kontakt> newRowItem(final String id, final int index, 
    final IModel<Kontakt> model) { 
     Item<Kontakt> rowItem = new Item<Kontakt>(id, index, model); 
     rowItem.add(new AjaxEventBehavior("onclick") { 

     private static final long serialVersionUID = 1L; 

     @Override 
     protected void onEvent(AjaxRequestTarget target) { 
      selectedKontakt = model.getObject(); 
      target.add(new InstitutTablePanel("institutTablePanel", selectedKontakt)); 
     } 
    }); 
    return rowItem; 
} 

ответ

2

Создать пустой WebMarkupContainer, который является пустым div и добавить его на страницу/родительский компонент. Затем, onClick, используйте addOrReplace и замените WebMarkupContainer на InstitutTablePanel. И WebMarkupContainer и InstitutTablePanel должны иметь один и тот же wicket:id

+0

Это рекомендуемый способ! –

+0

Jup, это сработало отлично :) –

1

Вы должны предназначаться существующие компоненты в ваших Ajax вызовов, поэтому я рекомендую инициализации InstitutTablePanel при инициализации страницы с моделью как модели Panel. Передача объектов модели без модели упаковки не рекомендуется в калитки и приводит к ненужным проблемам.

Вы можете изменить InstitutTablePanel, чтобы быть пустым, когда его модельный объект пуст или пуст.

Кроме того, Wicket построен вокруг прохождения моделей к компонентам, а не простым объектам, которые могут показаться ненужными сначала, но когда сложность возрастает, шаблон предотвращает множество ошибок и ошибок.

Редактировать: не забудьте использовать setoutputmarkupup (true) на добавленной панели.

+0

Но что-то вроде: InstitutTablePanel панель = новая панель («institutTablePanel»); Не может работать, потому что панель абстрактная. С другой стороны, я сталкиваюсь с той же проблемой ... –

+0

Сначала вы должны создать панель InstitutTablePanel. – thg

+0

InstitutTablePanel делает расширение Panel –

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

  • Нет связанных вопросов^_^