2013-02-13 2 views
1

다음 상황이 있습니다. 내 UI 양식에는 두 가지 콤보가 있는데, 하나는 야채 목록을 표시하고 다른 하나는 과일 목록을 표시합니다.GWT @Ui 팩토리 및 매개 변수가있는 반환 된 형식

ERROR: Duplicate factory in class VegetablesAndFruitsView for type SimpleComboBox. 
: 나는 오류가 ... 때마다

@UiFactory 
SimpleComboBox<Vegetable> createVegetablesCombo() { 
    return vegetables; 
} 

@UiFactory 
SimpleComboBox<Fruit> createFruitsCombo() { 
    return fruits; 
} 

을하지만 GWT는 매개 변수 반환 유형을 인식하지 못하는 것 같습니다 : 내 지원하는 뷰 클래스에서

나는 그런 방법을 선언하고 싶습니다

이 사례를 처리 할 수 ​​있습니까? 하나의 UI 양식에 여러 개의 콤보 박스가있는 좋은 예가 있습니까?

답변

3

런타임시 Java (GWT가 아니라 UiBinder가 아니라 Java 언어 자체)의 관점에서 SimpleComboBox<Vegetable>SimpleComboBox<Fruit> 사이에는 차이가 없습니다. 즉,이 오류는 모든 @UiConstructor 메서드를 찾고있는 UiBinder의 코드 생성에서 발생하며이를 사용하여 빌드합니다.

그럼 UiBinder는 어떤 기능을해야합니까? UiBinder XML에는 제네릭이 없습니다. UiBinder가이 권리를 얻을 수있는 유일한 방법은 적절한 generics를 사용하여 클래스에 @UiField 항목을 포함시킨 경우입니다. 그러면 GWT가 현재하지 않는 것과 같은 모호성이있을 수있는 언제든지 @UiField 주석이 필요할 것입니다.

무엇을이 목표로 달성하려고합니까? 필드 (vegetables 또는 fruits)를 반환하는 이유 - 해당 필드가 단지 @UiField(provided=true)으로 태그가 지정되지 않은 이유는 무엇입니까? 그런 다음,이 필드를 할당하기 위해 수행하는 모든 배선은 @UiConstructor 메소드가 필요없이 UiBinder에서 사용할 수 있습니다.

@UiField(provided=true) 
SimpleComboBox<Fruit> fruits; 

//... 

public MyWidget() { 
    fruits = new SimpleComboBox<Fruit>(...); 

    binder.createAndBind(this); 
} 

...

<form:SimpleComboBox ui:field="fruits" /> 

이 그냥 지나치게 단순화하고, 실제로, 다음과 같이 뭔가에 인수를 전달하는 고려하는 방법에 새로운 개체를 만드는 계획이라면 String type을 입력하고 값에 따라 다른 SimpleComboBox<?>을 반환합니다. UiBinder xml에서 다음과 같이 올바른 것을 만들 수 있습니다 :

<field:SimpleComboBox type="fruit" /> 
관련 문제