2012-09-02 2 views
1

현재 스프링 서비스 (및 최대 절전 모드)를 호출하는 Vaadin 인터페이스로 구성된 Vaadin 6.8.1 + Spring 3을 사용하는 프로젝트에 있습니다.Vaadin의 Form에 LazyQueryContainer와 Combobox를 바인딩하는 방법은 무엇입니까?

LazyQueryContainer (LQC) 덕분에 서비스에서 내 데이터를로드하여 Vaadin 테이블과 콤보 상자에 표시 할 수있었습니다. 이 시점에서 모든 것이 훌륭하고 훌륭합니다. 그러나 양식의 setItemDataSource 메서드를 호출 할 때 올바른 항목을 올바르게 선택하지 않는 LQC의 데이터와 함께 콤보 상자가 포함 된 양식이 있습니다.

예를 들어, 내 응용 프로그램은 데이터베이스의 개인 및 회사 목록을 관리합니다. 사람과 회사라는 두 가지 수업이 있습니다. 그리고 그 관계는 한 사람이 한 회사의 구성원처럼 간단합니다. 따라서 Person 클래스에는 Company라는 필드 회사가 있습니다. 이제 Person을 관리하는 Vaadin Form이 생겼습니다. 이 양식에는 데이터베이스의 모든 회사를 표시하는 콤보 상자가 있으며 선택한 회사는 해당 사람이 등록 된 회사입니다.

내 응용 프로그램이 서비스로 나뉘어져 있으므로 JPAContainer 나 HibernateContainer를 사용하여 직접 데이터에 액세스 할 수 없습니다. 그런 다음 LazyQueryContainer를 AbstractBeanQuery로 선택했다. Person 클래스와 Company 클래스의 데이터 소스를 만들었고 테이블과 콤보 박스에 제대로 표시됩니다. 바아 진 폼 (Vaadin Form)은 또한 텍스트 입력에서 사람의 문자열 필드를 적절하게 표시합니다.

그러나 회사 필드를 기본 텍스트 상자 대신 콤보 상자로 관리하려고했습니다. 그래서 FormFieldFactory를 구현하고 필드를 콤보 상자에 바인딩했습니다. 실제로 기본 회사 텍스트 상자가 없기 때문에 바인딩이 작동하지만 콤보 상자의 선택된 값은 공백 (null)입니다.

회사 클래스에서 equals 및 hashcode 메소드를 구현했지만 아무 것도 변경하지 않았습니다. 나는 또한 콤보 상자의 모든 데이터를로드해야한다고 생각했는데 (항목 수가 적기 때문에) LQC 객체에서 수동으로 객체를 얻는 방법을 모르겠습니다. 소스 코드가 없으면 디버깅 할 방법이 없습니다.

도움이 될 것입니다. 감사합니다. .

답변

1

LazyQueryContainer이 상품 ID로 Long을 사용하고 있지만 Vaadin 양식이 Company을 콤보 상자 값으로 설정하려고하고 있다고 생각합니다. 이 id (Company 인스턴스)는 LazyQueryContainer id 목록의 일부가 아니기 때문에 선택 항목이 null로 유지됩니다.

먼저 Company의 ID를 확인하고 LazyQueryContainer이 할당 된 ID를 찾아서 해당 값을 콤보 상자로 설정해야합니다. 또한 사용자 정의 필드를 만들고 의 하위 클래스를 만들어 양식에서 호출 할 때 setValue을 처리해야합니다.

사이드 노트 : Vaadin BeanItemContainer은 JavaBean을 아이템 ID로 사용합니다. 이것은 myCombo.setValue (myCompany)가 작동하는 이유입니다.

+0

실제로. 나는 클래스 회사의 물건을 기대하고 있었다. 고맙습니다. – edwin

관련 문제