2010-09-29 3 views
6

У меня есть AjaxFallbackDefaultDataTable, который содержит одну строку на результат теста. Результат теста может иметь записку, прикрепленную к нему, который должен отображаться заметно ниже результата теста, надеюсь давая таблицу, аналогичную следующей:Как вставить «подстроки» в калибровочную таблицу данных

| Test | Result | Appraisal | 
|------|--------|-----------| 
| 1 | 20.0 | PASS | 
| 2 | 1.50 | FAIL | 
| Note: This is an epic fail| 
| 3 | 19.4 | PASS | 
| 4 | 14.9 | PASS | 

Есть ли способ для достижения этой вставки строки (желательно с столбца) с использованием конструкций Wicket DataTable. Когда я копаюсь в источнике, я могу найти рендереры Item, но ничего, что касается строки.

В настоящее время у меня есть следующие:

// Create the sortable data provider. 
SortableDataProvider<TestResult> provider = new SortableDataProvider<TestResult>() { 
    //... hibernate pagination code ... 
}; 

List<IColumn> columns = new ArrayList<IColumn>(); 
columns.add(new TextFilteredPropertyColumn(new Model<String>("Test"), "test", "test")); 
columns.add(new TextFilteredPropertyColumn(new Model<String>("Result"), "result", "result")); 
columns.add(new TextFilteredPropertyColumn(new Model<String>("Appraisal"), "appraisal", "appraisal")); 

// Create a new AJAX table using the sortable, filtered data provider. 
final AjaxFallbackDefaultDataTable dataTable = new AjaxFallbackDefaultDataTable("testResultTable", columns.toArray(new IColumn[0]), provider, 20);// 20 = number of rows per page 

ответ

10

Я не думаю, что есть чистый способ сделать это, вам придется взломать результирующий HTML.

Я бы прикрепить пользовательское поведение к строкам, которые генерирует необходимый HTML автоматически, что-то вроде этого:

new AjaxFallbackDefaultDataTable<MyCustomObject>(
    id, columns, dataProvider, rowsPerPage){ 

    @Override 
    protected Item<MyCustomObject> newRowItem(String id, 
     int index, 
     final IModel<MyCustomObject> model){ 
     Item<MyCustomObject> item = super.newRowItem(id, index, model); 
     item.add(new AbstractBehavior(){ 

      private static final long serialVersionUID = 1L; 

      /** 
      * {@inheritDoc} 
      */ 
      @Override 
      public void onRendered(Component component){ 
       if(model.getObject().isEpicFail()){ 
        component.getResponse().write(
        "<tr><td colspan=\"3\">This is an epic fail</td></tr>"); 
       } 
      } 

     }); 
     return item; 
    } 

    private static final long serialVersionUID = 1L; 

} 
+0

То есть и абсолютно пятна на и очень быстрый ответ. Огромное спасибо за это, я почесал голову об этой проблеме на прошлой неделе. Ура! – spikeheap

+0

Нет проблем. Калитка на самом деле проста, как только вы обнимаете ее вокруг, но это занимает некоторое время. –

+0

Это своего рода уродство, чтобы сделать собственный HTML: o. Но переопределение newRowItem - хорошее начало, вы должны создать панель и добавить ее к элементу. – RobAu

0

Если посмотреть на класс NavigationToolbar (расширение, DataTable), если смотреть с точки зрения HTML там это одна строка таблицы html, построение объекта совсем другое, но результат хорош, другие данные представлены в строке HTML, не являющейся строкой в ​​смысле Java-таблица (из кода, который навигатор не является частью таблицы объектов, является внешним от такой точки

Код фрагмента Nice для анализа

Когда моя обогащенная Datatable данных будет платформа для визуального представления отчетов с итогом, я знаю, что это будет возможно

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