Как вставить «подстроки» в таблицу данных Wicket - PullRequest
7 голосов
/ 29 сентября 2010

У меня есть AjaxFallbackDefaultDataTable, который содержит одну строку на результат теста.К результату теста может быть прикреплена заметка, которая должна отображаться на видном месте ниже результата теста, возможно, с таблицей, похожей на следующую:предпочтительно с охватом столбцов) с использованием конструкций 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

Ответы [ 2 ]

11 голосов
/ 29 сентября 2010

Я не думаю, что есть чистый способ сделать это, вам придется взломать полученный 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 голосов
/ 04 сентября 2015

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

Хороший фрагмент кода для анализа

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

...