gpt4 book ai didi

java - Vaadin 如何处理具有非原始属性的 JavaBean

转载 作者:行者123 更新时间:2023-12-02 08:01:29 25 4
gpt4 key购买 nike

我有一个看起来像这样的 Bean

Class Person{
private String name;
private int age
private Properties attributes
public String getName() { return name; }
public int getAge() { return age; }
public Properties getAttributes () { return attributes; }
public void setName(String name) { this.name=name; }
public void setAge(int age) { this.age=age; }
public void setAttributes (Properties attributes) { this.attributes = attributes; }
}

尝试使用 Vaadin Forms 来编辑 Bean,我使用以下方法将 Bean 分配给表单

form.setItemDataSource(new BeanItem<Person>(person));

表单显示正确,属性显示“{eye.colour=green,hair.colour=brown}”但是,当尝试提交任何更改时,会引发与 Properties.< Init > 没有字符串构造函数有关的转换错误。

Vaadin Forms 如何处理具有非基本类型属性的 Bean?

最佳答案

您必须通过扩展 DefaultFieldFactory 来为表单创建自定义 fieldfactory。

参见https://vaadin.com/book/-/page/components.form.html (关于如何执行此操作的页面的一半)。这将允许您覆盖表单字段的默认生成方式。然而,这并没有提供一种简单的方法来处理您想要的自定义字段和转换。

幸运的是,我使用了一个很好的扩展,可以轻松创建名为自定义字段插件的自定义字段和属性转换。

https://vaadin.com/directory#addon/customfield

使用此组件,您可以轻松扩展现有字段并添加自定义转换。

由于关于如何执行此操作的示例并不多,因此这里有一个示例,说明自定义 FieldFactory 的各个部分如何与自定义字段一起工作。

公共(public)类 CustomFieldFactory 扩展 DefaultFieldFactory {

public DefaultProfileTableFieldFactory() {
}

@Override
public Field createField(Container container, Object itemId, Object propertyId, Component uiContext) {

if (propertyId.equals(YOURCUSTOMPROP)) {
Select select = new Select();
select.addItem(ITEM1);
select.addItem(ITEM2);
select.addItem(ITEM3);

return new SelectCustomField(select, String.class);
} else {
return super.createField(container, itemId, propertyId, uiContext);
}
}


private static class SelectCustomField extends FieldWrapper<String> {

protected SelectCustomField(Field wrappedField, Class<? extends String> propertyType) {
super(wrappedField, propertyType);
VerticalLayout l = new VerticalLayout();
l.addComponent(wrappedField);
setCompositionRoot(l);
l.setSizeUndefined();
this.setSizeUndefined();
wrappedField.setSizeUndefined();
}

@Override
protected String parse(Object value) throws ConversionException {
// parse value from select to your model
}

@Override
protected Object format(String value) {
// format model from your model to value to be shown
}

}

}

关于java - Vaadin 如何处理具有非原始属性的 JavaBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com