物品在地图中时如何在vaadin网格中设置物品

时间:2018-11-22 15:28:25

标签: java vaadin vaadin8 vaadin-grid

我正在尝试使用此查询和值将其加载到地图中

LinkedHashMap<SCRegionPriority, String> hash = new LinkedHashMap<>();
pstmt=("SELECT a.Id,a.RegionName,ISNULL(b.Priority,0) as priority 
      FROM dbo.region a left join dbo.SCMap b on a.Id = b.RegionId 
      and a.CountryId = b.CountryId and b.SCId=1 where a.CountryId ='1'")
ResultSet rs = pstmt.executeQuery();
con.commit();
    while (rs.next()) {
            SCPri c = new SCPri();
            c.setRegionid(rs.getInt(1));
            c.setRegionname(rs.getString(2));
            c.setPriority(rs.getInt(3));
            hash.put(c, String.valueOf(rs.getInt(3)));
        }

该查询为我提供了以下值:

  

1,0 | 2,1 | 3,1 | 4,2 | ...

然后我尝试将其加载到vaadin网格中,如下所示:

     List<HashMap<SCPri, String>> rows = new ArrayList<>();
     LinkedHashMap<SCPri, String> fakeBean1 = subdao1.getSCMap(subcontractor.getId(),subcontractor.getCountryId());
     rows.add(fakeBean1);
     Grid<HashMap<SCPri, String>> grid2 = new Grid<>();
     grid2.setItems(rows);

     for (Map.Entry<SCPri, String> entry : s.entrySet()) {
         grid2.addColumn(h -> h.get(entry.getKey().getRegionname())).setCaption(entry.getKey().getRegionname());
     }
     addComponents(grid2);

我无法使用动态生成的列以及在这些列下具有值的一个可编辑行来加载网格。 我正在尝试使网格如下所示:

r1|r2|r3|r4
0 |1 |1 |2

我尝试点击以下两个链接,但未能正常工作:

我该如何实现?

1 个答案:

答案 0 :(得分:0)

单行包含空单元格意味着每个单元格的值提供者回调均返回null(或"")。

在您的情况下,值提供者回调为h -> h.get(entry.getKey().getRegionname())。在这里,h代表行对象,即您的单个HashMap<SCPri, String>实例。我假设getRegionname()返回类似String的内容,这肯定会导致null的{​​{1}}结果,因为h.get()使用h实例键。将回调更改为SCPri可能会解决问题。

h -> h.get(entry.getKey())接受任何Map::get且没有编译错误,而不是要求您传递映射的实际键类型的实例,这是前通用时间的遗憾。