2013-11-25 3 views
0

Учитывая, что у меня есть эта сущность как часть редактора цепочки:Установить список допустимых значений в GWT ValueListBox на основе EnumSet?

public class Commission implements Serializable 
{ 

    private EnumSet<CommissionType> commissionTypes; 
    private CommissionType type; // must exist in commissionTypes 

    private String value; 

    public Commission() 
    { 

    } 
} 

и этот редактор для него:

public class CommissionEditor extends Composite implements Editor<Commission> 
{ 
    private static CommissionEditorUiBinder uiBinder = GWT.create(CommissionEditorUiBinder.class); 

    interface CommissionEditorUiBinder extends UiBinder<Widget, CommissionEditor> 
    { 
    } 

    @UiField(provided = true) 
    ValueListBox<CommissionType> type = new ValueListBox<CommissionType>(new AbstractRenderer<CommissionType>() 
    { 
     @Override 
     public String render(CommissionType object) 
     { 
      return object == null ? "" : object.toString(); 
     } 
    }); 

    @UiField 
    TextBox value; 

    public CommissionEditor() 
    { 
     type.setAcceptableValues(Arrays.asList(CommissionType.values())); 

     initWidget(uiBinder.createAndBindUi(this)); 
    } 

} 

На данный момент ValueListBox оказывает все возможные варианты CommissionType, как это:

ValueListBox rendering all possible values of the Enum

EnumSet может содержать от 1 до 4 из возможных вариантов, де в ожидании конкретного объекта. Есть ли способ заставить ValueListBox отображать только параметры в EnumSet, а затем сохранять значение в файле commType?

Имейте в виду, что я хочу также установить значение commType.

+0

Мне нравится стиль, который вы использовали. Это твитер-бутстрап? – Churro

+1

Приветствия! Да, это GWT-Bootstrap с темой Cosmo от bootswatch.com. – slugmandrew

+0

Спасибо, я посмотрю! – Churro

ответ

1

Есть два способа решить эту проблему:

1.) Если у вас есть прямой доступ к CommissionEditor затем создать сеттер в нем называют это при редактировании сущности:

public void setAcceptableValues(List<CommissionType> values) { 
    type.setAcceptableValues(values); 

} 

И называть это так, когда вы звоните driver.edit(entity);:

commissionEditor.setAcceptableValues(commission.getCommissionTypes()); 

2.) Вместо расширения интерфейса Editor вы можете продлить ValueAwareEditor и в методе setValue() вызывают setAcceptableValues с соответствующими значениями.

Подход 2, вероятно, более чистый подход.

+0

Спасибо! Я только что реализовал ValueAwareEditor, когда вы ответили. – slugmandrew

Смежные вопросы