0

我进行了一些测试以查看如何将组合框绑定到某些 bean 属性,但我遇到了一个异常:“ConversionException:无法将值转换为…………”我的示例使用 indexedContainer 可以正常工作组合框,但我在使用 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. 豆瓣组。这里 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");
    

当我尝试提交活页夹时,我收到关于将问题转换为字符串的错误。根据我阅读书籍和 vaadin api 的理解,BeanItemContainer 使用 bean 本身作为标识符,并且(这里可能是错误的)binder 使用项目标识符来绑定属性。所以这就是问题,从 Bean 到字符串的转换。我尝试在我的 TestCountry bean 上实现 toString()、hash() 和 equals(),但没有成功。在这种情况下使用 BeanItemContainer 可以做什么?

提前致谢!!

4

1 回答 1

0

您让您的 Vaadin 应用程序尝试将 Bean (TestCountry) 作为字符串保存在您的 TestBean 中。

这很好,但是你必须处理它有点不同。你有两个选择。你要么改变你的数据模型,所以 TestBean 看起来像这样:

TestBean
firstName - String
phone - String
country - TestCountry (1:n)

现在 TestBean 将存储一个 TestCountry 而不是 String 并且您的 ComboBox 不应再抛出任何错误

或者

您不会用 Bean 填充 ComboBox,而是使用 Country 字符串,因此 Vaadin 应用程序知道选择的数据类型以及要保存在 TestBean 中的内容。

myCombo.addItem(getStringOfCountryYouWantToAdd())
...

那么如果你将你的字符串属性“国家”绑定到现在只包含字符串的组合框,活页夹现在将如何以及将什么保存到“国家”中。

于 2013-08-22T08:10:27.487 回答