我正在尝试使用此查询和值将其加载到地图中
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
我尝试点击以下两个链接,但未能正常工作:
我该如何实现?
答案 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
且没有编译错误,而不是要求您传递映射的实际键类型的实例,这是前通用时间的遗憾。