1

私は現在、Vaadin 6.8.1 + Spring 3 を使用するプロジェクトに取り組んでいます。これは、Spring サービス (および背後で Hibernate) を呼び出す Vaadin インターフェイスとして構成されています。

LazyQueryContainer (LQC) のおかげで、サービスからデータを読み込んで、Vaadin テーブルとコンボボックスに表示することができました。この時点で、すべてが順調で素晴らしいです。ただし、フォームの setItemDataSource メソッドが呼び出されたときに正しい項目を適切に選択しない、LQC からのデータを含むコンボボックスを含むフォームがあります。

たとえば、私のアプリケーションは、データベース内の人物と会社のリストを管理しています。Person と Company の 2 つのクラスがあります。その関係は、人が会社のメンバーであるのと同じくらい単純です。そのため、Person クラスには Company タイプのフィールド company があります。これで、Person を管理する Vaadin Form ができました。このフォームには、データベース内のすべての会社を表示するコンボボックスがあり、選択された会社は、その人が登録されている会社です。

私のアプリケーションはサービスごとに分割されているため、JPAContainer または HibernateContainer を使用してデータに直接アクセスすることはできません。次に、AbstractBeanQuery を持つ LazyQueryContainer を選択しました。Person クラスと Company クラスのデータソースを作成したところ、テーブルとコンボボックスに正しく表示されました。Vaadin フォームは、テキスト入力の Person の文字列フィールドも適切に表示します。

ただし、既定のテキスト ボックスではなく、コンボ ボックスを使用して Company フィールドを管理したいと考えていました。そこで、FormFieldFactory を実装し、フィールドをコンボボックスにバインドしました。実際、既定の会社のテキスト ボックスはもうありません。つまり、バインドは機能していますが、コンボ ボックスで選択された値は空白 (null) です。

Company クラスに equals メソッドと hashcode メソッドを実装しましたが、何も変わりませんでした。また、コンボボックスにすべてのデータをロードする必要があると考えました (アイテムの数が少ないため) が、LQC オブジェクトからオブジェクトを手動で取得する方法がわかりません。また、ソース コードがなければ、デバッグする方法はありません。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

LazyQueryContainer問題は、アイテム ID として使用Longしているが、Vaadin フォームがCompanyコンボ ボックスの値として設定しようとしているということだと思います。この ID (Companyインスタンス) はLazyQueryContainerID リストの一部ではないため、選択は null のままです。

Company最初に割り当てられた自分のIDを見つけてLazyQueryContainer、その値をコンボボックスに設定する必要があります。また、カスタム フィールドを作成してサブクラス化し、フォームから呼び出されたときにComboBoxを処理できるようにする必要があります。setValue

補足: VaadinBeanItemContainerは、JavaBean をアイテム ID として使用します。これが機能する理由myCombo.setValue (myCompany)です。

于 2012-09-04T10:28:32.220 に答える