Java 显示属性项名称而不是id
我的布局包含多个组件(4个文本字段和2个组合框)。 这是如何定义的:Java 显示属性项名称而不是id,java,combobox,vaadin7,Java,Combobox,Vaadin7,我的布局包含多个组件(4个文本字段和2个组合框)。 这是如何定义的: private ManufacturerRepository manRepo; InteriorDoor interiorDoor; Manufacturer manufacturer; ComponentHelper componentHelper; @PropertyId("width") private TextField widthField; @PropertyId("height") private Tex
private ManufacturerRepository manRepo;
InteriorDoor interiorDoor;
Manufacturer manufacturer;
ComponentHelper componentHelper;
@PropertyId("width")
private TextField widthField;
@PropertyId("height")
private TextField heightField;
@PropertyId("thickness")
private TextField thicknessField;
@PropertyId("modelName")
private TextField modelName;
@PropertyId("hasGlass")
private ComboBox glassCombo;
@PropertyId("manufacturerId")
private ComboBox manCombo;
private BeanItemContainer<Manufacturer> beanItemContainer;
不要介意glassCombo,因为它有恒定的数据,绑定在那里工作得很好
以下是我绑定字段的方式:
// binding data to fields
BeanFieldGroup binder = new BeanFieldGroup<>(InteriorDoor.class);
binder.setItemDataSource(interiorDoor);
binder.setBuffered(false);
binder.bindMemberFields(this);
您可以实现转换器制造商->长,并在组合框上进行设置
manCombo.setConverter(new Converter<Object, Long>() {
@Override
public Long convertToModel(Object value, Class<? extends Long> targetType, Locale locale) throws ConversionException {
if (value == null) {
return null;
}
return ((Manifacturer)value).getId();
}
@Override
public Object convertToPresentation(Long value, Class<?> targetType, Locale locale) throws ConversionException {
if (value == null) {
return null;
}
return beanItemContainer.getItemIds().stream().filter( m -> value.equals(m.getId()))
.findFirst().orElse(null);
}
...
});
manCombo.setConverter(新转换器(){
@凌驾
公共长convertToModel(对象值、类targetType、区域设置)引发ConversionException{
如果(值==null){
返回null;
}
返回beanItemContainer.getItemId().stream().filter(m->value.equals(m.getId()))
.findFirst().orElse(null);
}
...
});
它不工作真奇怪。我试过了,很好。从stacktrace看,转换器中的getModelType似乎返回null。你能发布你的转换器代码吗?它看起来和你发布的一模一样。我尝试了多种选择。您确定只需要两个重写方法而不是四个吗?对不起,编辑了我的答案。所有方法都必须实现,我在示例代码`@Override public Class getModelType(){return Long.Class;}@Override public Class getPresentationType(){return Object.Class;}`中遗漏了它们。`Yes!终于成功了!我欠你一杯啤酒!是否可以将其解耦,以便我可以轻松地将其称为manCombo.setConverter(新的myConverter())
?Atm由于BeanItemContainer的原因,不可能做到这一点。。
manCombo.setConverter(new Converter<Object, Long>() {
@Override
public Long convertToModel(Object value, Class<? extends Long> targetType, Locale locale)
throws ConversionException {
if (value == null) {
return null;
}
return ((Manufacturer)value).getId();
}
@Override
public Object convertToPresentation(Long value, Class<?> targetType, Locale locale)
throws ConversionException {
if (value == null) {
return null;
}
return beanItemContainer.getItemIds().stream().filter( m -> value.equals(m.getId()))
.findFirst().orElse(null);
}
@Override
public Class<Long> getModelType() {
return null;
}
@Override
public Class<Object> getPresentationType() {
return null;
}
});
manCombo.setConverter(new Converter<Object, Long>() {
@Override
public Long convertToModel(Object value, Class<? extends Long> targetType, Locale locale) throws ConversionException {
if (value == null) {
return null;
}
return ((Manifacturer)value).getId();
}
@Override
public Object convertToPresentation(Long value, Class<?> targetType, Locale locale) throws ConversionException {
if (value == null) {
return null;
}
return beanItemContainer.getItemIds().stream().filter( m -> value.equals(m.getId()))
.findFirst().orElse(null);
}
...
});