我做了一些测试,看看如何将combobox绑定到某个bean属性,但我得到一个异常:“ConversionException:无法在...........将值转换为String” 我的示例使用indexedContainer for combobox工作正常,但是我对BeanItem容器有些麻烦。 是)我有的: 1. TestCountry,BeanItemContainer的简单java bean(为了简单起见,我没有在这里放置setter和getter或构造函数):
public class TestCountry implements Serializable {
private String name;
private String shortName;
}
BeanItemContainer的实例化
BeanItemContainer<TestCountry> _data = new BeanItemContainer<TestCountry>(TestCountry.class);
_data.addItem(new TestCountry("Afganistan","AF"));
_data.addItem(new TestCountry("Albania","AL"));
bean归档组。这里,TestBean是另一个带有简单字符串属性的bean(“firstName”,“phone”,“contry”)
BeanFieldGroup<TestBean> binder = new BeanFieldGroup<TestBean>(TestBean.class);
组合框
ComboBox myCombo = new ComboBox("Select your country", _data);
基本代码
binder.bind(myCombo, "country");
当我尝试提交活页夹时,我遇到了关于将转换问题转换为字符串的错误。从我理解的阅读书籍和vaadin api,BeanItemContainer使用bean本身作为标识符和(这里可能是错误的)binder使用项目标识符来绑定属性。所以这是问题,从Bean转换为字符串。 我尝试在我的TestCountry bean上实现toString(),hash()和equals()但没有成功。在这种情况下,如何使用BeanItemContainer?
提前致谢!!
答案 0 :(得分:0)
您让Vaadin应用程序尝试将Bean(TestCountry)保存为TestBean中的String。
那很好,但是你必须接近它有点不同。你有两个选择。您可以更改数据模型,因此TestBean看起来像这样:
TestBean
firstName - String
phone - String
country - TestCountry (1:n)
现在TestBean将存储一个TestCountry而不是一个String,而你的ComboBox不会再抛出任何错误
或
你没有用Beans填充你的ComboBox,但是使用Country字符串,所以Vaadin应用程序知道选择的数据类型以及在TestBean中保存的内容。
myCombo.addItem(getStringOfCountryYouWantToAdd())
...
然后,如果将String属性“country”绑定到现在只包含字符串的ComboBox,则绑定器现在将如何以及保存到“country”中的内容。