【问题标题】:How to fill Vaadin Grid with Map items type如何使用地图项目类型填充 Vaadin Grid
【发布时间】:2018-08-23 09:40:14
【问题描述】:

我想用 Map<String, Object> 项目填充我的 Vaadin 网格。 那是因为我像这样从数据库中获取数据(也许这是主要问题):

List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from db", new Object[]{});

现在假设我创建了我的测试列表并用一些地图填充它:

List<Map<String, Object>> items = new ArrayList<>();
items.add(map);
items.add(map2);

我知道如何使用非动态数据模型,例如:

grid.addColumn(Person::getName).setCaption("Name");
grid.addColumn(Person::getAge).setCaption("Age");

但是如何创建我的 Grid 列以便它使用我的地图键? 我现在拥有的:

Grid<Map<String, Object>> grid = new Grid<>();

items.get(0).keySet().forEach(key ->
    grid.addColumn(c -> c.get(key)));

grid.setItems(items);

它给了我输出:

b2 / b3 / b1

预期:

a1 / a2 / a3

b1 / b2 / b3

我不知道如何在列表中的每个地图中找到我的项目。还有为什么它不保持订单? 欣赏每一个答案!

【问题讨论】:

  • 您确定这真的是设置问题,而不是项目/您的列表本身的问题吗?错误的顺序 (b2,b3,b1) 很可能是您的 keySet/map 没有被排序/排序(例如 HashMap)
  • 1) 两个映射中的键是否相等?如果不是,那么对于您的第二个列表,每列的所有值都将为空。 2) Order in hash-maps is not guaranteed,如果你正在使用的话。请考虑添加一个sscce,它可以充分说明您在做什么。
  • 谢谢,原来是物品问题!是的,由于缺乏排序,订单没有保留。我的 jdbcquery 呢?是不是有点恶心?
  • 您对查询的讨厌的评论是一个全新的问题,与这个问题无关,因此通常需要一个单独的问题。 然而它也可能表明您需要在发布新问题之前阅读 SQL 查询简介、Spring JDBC 或您使用的任何框架。如果您已经熟悉这些概念并且有一个确切的问题,您可以发布一个问题,但是问一些如此通用的东西并不是真的适合 SO。如果我遗漏了什么,请告诉我。
  • 不客气。好吧,您正在从表中选择 EVERYTHING,因此如果您有大量数据,则势必需要一段时间,在这种情况下,您可能需要考虑 lazy-loading of only the necessary to display data 而不是将其全部加载到内存中。

标签: java spring vaadin


【解决方案1】:

使用LinkedHashMap 代替Map

LinkedHashMap 保留插入顺序。

【讨论】:

  • 感谢您的回答。我没有这种类型的影响,因为我使用的是JdbcTemplate。不过不用担心,这两个问题都在问题的 cmets 中解决了 :)
  • @DawidFieluba 如果您的问题已解决,请发布一个答案来说明如何解决。您可以发布并接受您自己的答案。
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 2021-03-02
  • 2019-05-18
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多