0

エディタ チェーンの一部としてこのエンティティがあるとします。

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 のすべての可能なオプションを次のようにレンダリングします。

Enum のすべての可能な値をレンダリングする ValueListBox

EnumSet には、特定のエンティティに応じて、1 ~ 4 個の可能なオプションを含めることができます。ValueListBox が EnumSet のオプションのみをレンダリングし、その値を CommissionType に保存する方法はありますか?

CommissionType の値も設定したいことに注意してください。

4

1 に答える 1

1

それを解決するには、次の 2 つの方法があります。

1.) に直接アクセスできる場合はCommissionEditor、エンティティを編集するときに呼び出すセッターを作成します。

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

}

を呼び出すときは、次のように呼び出しますdriver.edit(entity);

commissionEditor.setAcceptableValues(commission.getCommissionTypes());

2.)Editorインターフェイスを拡張する代わりに、ValueAwareEditorを拡張し、setValue()メソッド呼び出しsetAcceptableValuesで対応する値を使用できます。

アプローチ 2 は、おそらくよりクリーンなアプローチです。

于 2013-11-25T14:28:50.220 に答える