【问题标题】:How to bind a LazyQueryContainer and a Combobox in a Form in Vaadin?如何在 Vaadin 的表单中绑定 LazyQueryContainer 和 Combobox?
【发布时间】:2012-09-02 20:42:14
【问题描述】:

我目前正在进行一个使用 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 对象中手动获取对象。而且没有源代码,就无法调试。

非常欢迎任何帮助。 谢谢。

【问题讨论】:

    标签: java combobox datasource vaadin


    【解决方案1】:

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

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

    旁注:Vaadin BeanItemContainer 使用您的 JavaBean 作为它的项目 ID。这就是myCombo.setValue (myCompany) 起作用的原因。

    【讨论】:

    • 确实如此。我期待一个公司类的对象。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多