基于EnumSet在GWT ValueListBox中设置可接受值的列表?

时间:2013-11-25 12:52:36

标签: java gwt enums gwt-editors

鉴于我将此实体作为编辑链的一部分:

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中的选项,然后将值保存在commissionType中?

请记住我也想设置commissionType的值。

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决它:

1。)如果您可以直接访问CommissionEditor,则在其中创建一个setter,在编辑实体时调用它:

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

}

当你拨打driver.edit(entity);

时,请这样称呼它
commissionEditor.setAcceptableValues(commission.getCommissionTypes());

2.。)您可以使用相应的值扩展ValueAwareEditorEditor方法调用setValue(),而不是扩展setAcceptableValues界面。

方法2可能是更清洁的方法。