【问题标题】:How to insert 'sub-rows' into a Wicket DataTable如何将“子行”插入 Wicket DataTable
【发布时间】:2011-04-18 20:24:20
【问题描述】:

我有一个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

【问题讨论】:

    标签: java ajax datatable wicket


    【解决方案1】:

    我认为没有一种干净的方法可以做到这一点,您将不得不破解生成的 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;
    
    }
    

    【讨论】:

    • 这既是绝对正确的,也是一个非常快速的回复。非常感谢,过去一周我一直在为这个问题摸不着头脑。干杯!
    • 没有问题。一旦你把头绕在 Wicket 上,它实际上很容易,但这需要一些时间。
    • 渲染自己的 HTML 有点丑:o。但是覆盖 newRowItem 是一个好的开始,您应该创建一个 Panel 并将其添加到项目中。
    【解决方案2】:

    如果看类NavigationToolbar(扩展名,DataTable)从HTML的角度看有一行html表,对象构造有很大不同但结果很好,其他数据在HTML行中没有是有意义的 Java 表中的一行(从代码中导航器不是对象表的一部分,从这样的角度来看是外部的。

    很好的片段代码分析

    当我丰富的数据数据表将成为直观呈现带有小计的报告的平台时,我知道这将是可能的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2011-08-10
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2012-07-07
      相关资源
      最近更新 更多