1

我目前正在使用 Vaadin 6.8.1 + Spring 3 的项目,该项目结构为调用 Spring 服务(以及后面的 Hibernate)的 Vaadin 接口。

感谢 LazyQueryContainer (LQC),我可以从服务中加载我的数据并将其显示在 Vaadin 表和组合框中。在这一点上,一切都很好。但是,我有一个包含组合框的表单,其中包含来自 LQC 的数据,当调用表单的 setItemDataSource 方法时,它没有正确选择正确的项目。

例如,我的应用程序管理数据库中的人员和公司列表。有 2 个类:Person 和 Company。这种关系就像一个人是一家公司的成员一样简单。因此,Person 类有一个 Company 类型的字段 company。现在,我有一个管理人员的 Vaadin 表单。在这个表格中是一个组合框,显示数据库中的所有公司,所选公司是该人注册的公司。

由于我的应用程序是按服务划分的,因此我不能使用 JPAContainer 或 HibernateContainer 直接访问我的数据。然后我选择了带有 AbstractBeanQuery 的 LazyQueryContainer。我为 Person 和 Company 类创建了一个数据源,它们在表格和组合框中正确显示。Vaadin 表单还在文本输入中正确显示人员的字符串字段。

但是,我想使用组合框而不是默认文本框来管理公司字段。因此,我实现了一个 FormFieldFactory 并将该字段绑定到组合框。确实没有更多的默认公司文本框,这意味着绑定正在工作,但组合框中的选定值是空白(null)。

我在 Company 类中实现了 equals 和 hashcode 方法,但它没有改变任何东西。我还认为我应该在组合框中加载所有数据(因为项目数量很少),但我不知道如何从 LQC 对象中手动获取对象。没有源代码,就无法调试。

任何帮助都会非常受欢迎。谢谢。

4

1 回答 1

1

我认为您的问题是LazyQueryContainer用作Long项目 ID,但 Vaadin 表单正试图将您设置Company为组合框值。由于此 id(Company实例)不是LazyQueryContainerid 列表的一部分,因此选择保持为空。

您需要首先找出分配给它的您的 id CompanyLazyQueryContainer然后将该值设置为组合框。您还需要创建一个自定义字段和子类,ComboBox以便您可以setValue在表单调用它时进行处理。

旁注:VaadinBeanItemContainer使用您的 JavaBean 作为它的项目 ID。这就是为什么myCombo.setValue (myCompany)有效。

于 2012-09-04T10:28:32.220 回答