我目前正在进行一个使用 Vaadin 6.8.1 + Spring 3 的项目,该项目的结构是调用 Spring 服务(以及后面的 Hibernate)的 Vaadin 接口(interface)。
感谢 LazyQueryContainer (LQC),我可以从服务加载数据并将其显示在 Vaadin 表和组合框中。至此,一切都很好。但是,我有一个包含组合框的表单,其中包含来自 LQC 的数据,当调用表单的 setItemDataSource 方法时,该表单无法正确选择正确的项目。
例如,我的应用程序管理数据库中的个人和公司列表。有 2 个类别:个人和公司。这种关系就像一个人是一个公司的成员一样简单。因此,Person 类有一个 Company 类型的现场公司。 现在,我有一个管理人员的 Vaadin 表单。在这个表单中,有一个组合框,显示数据库中的所有公司,所选公司是该人注册的公司。
由于我的应用程序分为服务,因此我无法使用 JPAContainer 或 HibernateContainer 直接访问我的数据。然后我选择了 LazyQueryContainer 及其 AbstractBeanQuery。我为 Person 和 Company 类创建了一个数据源,它们在表和组合框中正确显示。 Vaadin 表单还可以在文本输入中正确显示人员的字符串字段。
但是,我想使用组合框而不是默认文本框来管理公司字段。因此,我实现了一个 FormFieldFactory 并将该字段绑定(bind)到组合框。确实不再有默认的公司文本框,这意味着绑定(bind)正在工作,但组合框中的选定值是空白(null)。
我在 Company 类中实现了 equals 和 hashcode 方法,但它没有改变任何东西。我还认为我应该加载组合框中的所有数据(因为项目数量很少),但我不知道如何从 LQC 对象中手动获取对象。如果没有源代码,就无法进行调试。
非常欢迎任何帮助。 谢谢。
最佳答案
我认为您的问题是 LazyQueryContainer
使用 Long
作为项目 ID,但 Vaadin 表单试图将您的 Company
设置为组合框值。由于此 id(Company
实例)不是 LazyQueryContainer
id 列表的一部分,因此选择保持为空。
您需要首先找出 LazyQueryContainer
分配给您的 Company
的 ID,然后将该值设置为组合框。您还需要创建一个自定义字段并子类化ComboBox
,以便您可以在表单调用setValue
时对其进行处理。
旁注:Vaadin BeanItemContainer
使用您的 JavaBean 作为其项目 ID。这就是 myCombo.setValue (myCompany)
起作用的原因。
关于java - 如何在 Vaadin 的表单中绑定(bind) LazyQueryContainer 和 Combobox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239596/