我想解决这个问题,从Combobox数字我可以选择空值(意思不是必需的)但是withNullRepresentation(0)是问题因为我想发送到DB号而不是选择的数字为null,因为我稍后在Grid中使用它如果null保存,我希望在列中显示空值,我的意思是如果保存的值为null整数(或int 0)在网格中转换为空字符串...我做愚蠢的黑客,如果没有选择值,我可以Vaadin转换类似IntegerToStringConverter的东西解析从数据库到网格的空整数,如空字符串?
答案 0 :(得分:1)
withNullRepresentation
适用于数据库中可能包含null
值的情况,但您不希望将这些null
值传递给组件。 ComboBox
通常不是这种情况,其中null
与空选择相同。
因此,我建议在绑定withNullRepresentation
时不要使用ComboBox
。如果ComboBox.setEmptySelectionCaption(String)
的默认设置不适合您的情况,您可以使用""
配置向用户显示空选择的方式。
然后当你想要显示例如在Grid中,您可以为该列配置如何处理该值。使用grid.addColumn(item -> item.getNumber()
之类的内容配置列时,Grid会在内部执行类似String.valueOf(value)
的操作以实际显示值。这会导致null
值显示为"null"
。
解决此问题的一种方法是以一种以不同方式处理null
值的方式明确地执行字符串转换,例如: grid.addColumn(item -> Objects.toString(item.getNumber(), ""))
。另一种方法是将列配置为使用NumberRenderer
,默认情况下将空值表示为""
。您可以grid.addColumn(item -> item.getNumber(), new NumberRenderer())