2010-09-29 10 views
6

Mam AjaxFallbackDefaultDataTable, który zawiera jeden wiersz na wynik testu. Wynik testu może mieć notatkę z nim związane, które musi być widocznym poniżej wyniku testu, mam nadzieję, że dając tabelę podobną do następującej:Jak wstawić "podrzędny" do Wicket DataTable

| 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 | 

Czy istnieje jakiś sposób, aby osiągnąć ten wiersz wstawiania (najlepiej z rozpiętość kolumn) przy użyciu konstruktów Wicket DataTable. Kiedy sięgam do źródła, mogę znaleźć renderery Item, ale nic, co zajmuje się wierszem.

Obecnie mam następujące:

// 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 

Odpowiedz

10

nie sądzę jest czysty sposób, aby to zrobić, trzeba będzie siekać wynikowy HTML.

Chciałbym dołączyć zachowanie niestandardowe do wierszy, które generuje wymaganą HTML automatycznie, coś takiego:

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

To jest absolutnie trafne i bardzo szybka odpowiedź. Wielkie dzięki za to, że drapałem się po tym problemie przez ostatni tydzień. Twoje zdrowie! – spikeheap

+0

Brak prob. Wicket jest rzeczywiście łatwy, gdy owiniesz głowę wokół niego, ale to zajmuje trochę czasu. –

+0

To jest trochę brzydkie, aby renderować własny kod HTML: o. Ale przesłonięcie newRowItem jest dobrym początkiem, powinieneś utworzyć panel i dodać go do przedmiotu. – RobAu

0

Jeśli spojrzeć na klasy NavigationToolbar (przedłużającej DataTable), patrząc z punktu widzenia nie HTML jest jednym wierszem tabeli html, budowa obiektu jest całkiem inna, ale wynik jest dobry, inne dane są przedstawione w wierszu HTML nie będącym rzędem w sensie Tabela Java (z kodu, który nawigator nie jest częścią tabeli obiektów, jest zewnętrzny od takiego punktu z widoku:

Przyjemny fragment kodu do analizy

Gdy moja wzbogacona data danych dla danych będzie platformą do wizualnie prezentowanych raportów z podsumami, wiem, że będzie to możliwe