java – 具有可变列数的Wicket表

我一直在创建表,方法是在页面中添加一个ListView(将我的数据作为List< MyObject>提供),并为html文件中的每一列分配相应的ID.

但是现在我有一种情况,而不是简单的List< MyObject>我有List< Map< String,MyObject>>.我还得到一个列表,其中包含嵌套映射的所有可能键(List< String>).现在我需要创建一个表,其中Map的每个值都应该在列中,并且键的名称指向该值.

假设我有以下数据:

keys = ['a','b']

data = [ { 'a' = 1,'b' = 2 },{ 'a' = 3,'b' = 4 },{ 'a' = 5,'b' = 6}]

我想创建表:

<table>
    <tr>
        <th>a</th>
        <th>b</th>
    </tr>
    <tr>
        <td>1</td>
        <td>2</td>
    </tr>
    <tr>
        <td>3</td>
        <td>4</td>
    </tr>
    <tr>
        <td>5</td>
        <td>6</td>
    </tr>
</table>

知道嵌套Map中的键的名称和数量可以改变,在wicket中实现它的最佳方法是什么?

解决方法

您可以嵌套ListView.你想要的标记看起来像这样:

<table>
  <tr><th wicket:id="headerlist"><span wicket:id="header"></span></th></tr>
  <tr wicket:id="contentlist"><td wicket:id="column">
    <span wicket:id="data"></span>
  </td></tr>
</table>

然后,您将需要三个ListView.第一个(headerlist)将填充键列表中的标题.这很简单,所以我将跳过这个例子.

第二个(内容列表)将在您的数据列表中.在populateItems方法中,您将添加第三个ListView(列),它将再次遍历键列表:

add(new ListView<Map<String,MyObject>>("contentlist",data) {
  protected void populateItem(ListItem<Map<String,MyObject>> item) {
    final Map<String,MyObject> map = item.getModelObject();
    // Inner list - using item.add to add to the inner list
    item.add(new ListView<String>("column",keys) {
      protected void populateItem(ListItem<String> item) {
        String key = item.getModelObject();
        item.add(new Label("data",map.get(key).toString()));
      }
    });
  }
});

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...