Combobox与BeanItemContainer和BeanFieldGroup抛出转换异常

时间:2013-08-21 19:43:10

标签: javabeans vaadin

我做了一些测试,看看如何将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;
}
  1. BeanItemContainer的实例化

    BeanItemContainer<TestCountry> _data = new BeanItemContainer<TestCountry>(TestCountry.class);
    _data.addItem(new TestCountry("Afganistan","AF"));
    _data.addItem(new TestCountry("Albania","AL"));
    
  2. bean归档组。这里,TestBean是另一个带有简单字符串属性的bean(“firstName”,“phone”,“contry”)

    BeanFieldGroup<TestBean> binder =  new BeanFieldGroup<TestBean>(TestBean.class);
    
  3. 组合框

    ComboBox myCombo = new ComboBox("Select your country", _data);
    
  4. 基本代码

    binder.bind(myCombo, "country");
    
  5. 当我尝试提交活页夹时,我遇到了关于将转换问题转换为字符串的错误。从我理解的阅读书籍和vaadin api,BeanItemContainer使用bean本身作为标识符和(这里可能是错误的)binder使用项目标识符来绑定属性。所以这是问题,从Bean转换为字符串。 我尝试在我的TestCountry bean上实现toString(),hash()和equals()但没有成功。在这种情况下,如何使用BeanItemContainer?

    提前致谢!!

1 个答案:

答案 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”中的内容。