如何使用Wicket中的转发器以表格格式添加动态内容

时间:2014-11-25 10:01:05

标签: wicket repeater dynamic-data

我是Wicket的新手,我正试图在wicket中添加纯粹的动态内容。 我有一个对象TableDataValuesVO列表,它有一个String tableName和一个map columnNamesAndValues(包含columnName及其值)。列表中的每个对象表示不同表的不同数据记录(columnNameAndValues的大小因每个对象而不同)。截至目前,我正在对columnName和Value使用重复查看。但它每行显示一个columnName,每行显示一个columnValue。

生成此组件的类:
    HTML:

<table wicket:id="applicationDataView">

爪哇:

boolean columnNameRendered = false;
applicationDataView = new RepeatingView("applicationDataView")
RepeatingView tableView = new RepeatingView(applicationDataView.newChildId());
RepeatingView columnNameView = new RepeatingView(applicationDataView.newChildId());
tableView.add(new Label(applicationDataView.newChildId(),tableName));
applicationDataView.add(columnNameView);
applicationDataView.add(tableView);
List<dataVO> dataForTable= applicationDataByTable.get(tableName);
for (DataVO dataVO: dataForTable)
{
    RepeatingView columnValueView= new RepeatingView(applicationDataView.newChildId());
    if (!columnNameRendered)
    {
        for (String columnName : dataVO.getColumnNamesAndValues().keySet())
        {
            columnNameView.add(new Label(tableName+columnName,columnName));
        }
        columnNameRendered = true;
    }
    for (String columnName : dataVO.getColumnNamesAndValues().keySet())
    {
        String columnValue = tableDataValuesForRecordVO.getColumnNamesAndValues().get(columnName);
        columnValueView.add(new Label(applicationDataView.newChildId(),columnValue));
        applicationDataView.add(columnValueView);
    }
}

实际结果:

Table name1:
Column 1
Column 2
Column 3
Val11
Val12
....


Table name2:
    Column 1
    Column 2
    Column 3
    Column 4
    Val11
    Val12....

预期结果:

Table Name1:

    Col1  col2  Col3
    val11 val12 val13
    val21 val22 val23


Table Name2:

        Co131  col32  Col33 col34
        val11 val12 val13  val14
        val21 val22 val23  val24

请帮助提供显示动态数据的解决方案?

1 个答案:

答案 0 :(得分:2)

例如,您可以使用吸引了大量ListView的{​​{1}}。 (旁注:我认为这不会很快,因为你会生成大量的HTML。)

爪哇:

DataTable

HTML:

List<DataVo> dataVoList = ... //create your list of datavo's

add(new ListView<DataVo>("listview", dataVoList) {
    protected void populateItem(ListItem<DataVo> item) {
        DataVo dataVo = (DataVo) item.getModelObject();
        final DataProvider dataProviderBasedOnVo = ... //create dataprovider here.         
        IColumn[] columns = ... //create columns here, based on the dataVo
        item.add(new DataTable("table", columns, dataProviderBasedOnVo, 10));
    }
});