从Vaadin7.7.6升级到Vaadin8.20.0:MenuItem数据方法替代方案咨询
Vaadin8 移除了 ContextMenuItem 改用 MenuBar.MenuItem 后,虽然没有直接提供 setData()/getData() 方法,但可以通过以下两种方式实现相同的数据存取功能:
方法一:使用通用的 setUserData()/getUserData()
Vaadin 组件体系中大部分组件都支持这对方法,用来存储自定义业务数据,用法和原 setData()/getData() 完全一致:
// 存储自定义数据 MenuBar.MenuItem menuItem = menuBar.addItem("示例菜单项", null); menuItem.setUserData(yourCustomData); // yourCustomData 可以是任意对象 // 获取存储的数据 YourCustomDataType data = (YourCustomDataType) menuItem.getUserData();
方法二:用 Map 存储多键值对数据
如果需要给单个菜单项关联多个数据,可以将数据封装进 Map 后再存入:
// 封装多组数据 Map<String, Object> dataMap = new HashMap<>(); dataMap.put("id", 123); dataMap.put("name", "测试项"); menuItem.setUserData(dataMap); // 读取指定数据 Map<String, Object> retrievedMap = (Map<String, Object>) menuItem.getUserData(); Integer itemId = (Integer) retrievedMap.get("id"); String itemName = (String) retrievedMap.get("name");
这两种方式完全可以替代原 ContextMenuItem 的数据存取逻辑,无需额外扩展组件。
内容的提问来源于stack exchange,提问作者NewBee
相关产品推荐
相关产品推荐

