2013-11-25 43 views
0

既然我有这个实体的编辑链的一部分:基于EnumSet在GWT ValueListBox中设置可接受值的列表?

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,DE之间包含待定于特定实体。有没有办法让ValueListBox只渲染EnumSet中的选项,然后将值保存在commissionType中?

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

+0

我喜欢你使用的造型。那是twitter的引导吗? – Churro

+1

干杯!是的,它是GWT-Bootstrap与来自bootswatch.com的Cosmo主题。 – slugmandrew

+0

谢谢,我来看看! – Churro

回答

1

有两种方法来解决这个问题:

1)如果您有到CommissionEditor直接访问然后创建一个设置在它调用它,当你编辑的实体:

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

} 

而且这样称呼它,当你调用driver.edit(entity);

commissionEditor.setAcceptableValues(commission.getCommissionTypes()); 

2)除了延长Editor接口可以扩展ValueAwareEditorsetValue()方法调用setAcceptableValues与相应的值。

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

+0

谢谢!在您回答时,我刚刚实施了ValueAwareEditor。 – slugmandrew