java - 如何在 Vaadin 的表单中绑定(bind) LazyQueryContainer 和 Combobox?

标签 java combobox datasource vaadin

我目前正在进行一个使用 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/

相关文章:

java - 如何在java中使用列表中的数组

java - 如何正确实现部分wakeLock?

C# ComboBox SelectedValue 在失去焦点时重置

c# - 显示组合框中外键约束的名称

spring - 通过 org.springframework.orm.hibernate4.LocalSessionFactoryBean 创建 HibernateTemplate

oracle - 无法在 Wildfly 10 上定义 oracle 数据源

java - 使用jsp搜索数据

java - DTO 在通过网络传输时如何自动序列化 (java)

vb6 - 如何在 VB6 中创建自动完成组合框?

c# - 在 ASP.NET 中将行插入数据库