鉴于我将此实体作为编辑链的一部分:
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的所有可能选项,如下所示:
EnumSet可以包含1到4个可能的选项,具体取决于特定实体。有没有办法让ValueListBox只渲染EnumSet中的选项,然后将值保存在commissionType中?
请记住我也想设置commissionType的值。
答案 0 :(得分:1)
有两种方法可以解决它:
1。)如果您可以直接访问CommissionEditor
,则在其中创建一个setter,在编辑实体时调用它:
public void setAcceptableValues(List<CommissionType> values) {
type.setAcceptableValues(values);
}
当你拨打driver.edit(entity);
:
commissionEditor.setAcceptableValues(commission.getCommissionTypes());
2.。)您可以使用相应的值扩展ValueAwareEditor和Editor
方法调用setValue()
,而不是扩展setAcceptableValues
界面。
方法2可能是更清洁的方法。