GWT GXT将Validator添加到Composite

时间:2014-06-19 06:41:04

标签: gwt gxt

我有自定义Widget(复合)。我想用我的逻辑来验证这个复合(客户端)。我想在此组件的边框上显示错误消息,例如TextFild.isValid()

public class ProgramBeneficiariesField implements IsWidget{
private Constants constants = ClientFactory.getConstants();
private VerticalLayoutContainer vlc;
private ListStore<Beneficiary> beneficiaryListStore;

public ProgramBeneficiariesField() {
    BeneficiaryProperties props = GWT.create(BeneficiaryProperties.class);

    ColumnConfig<Beneficiary, BeneficiaryName> beneficiaryColumn = new ColumnConfig<Beneficiary, BeneficiaryName>(props.beneficiaryName(), 100, constants.beneficiary());
    ColumnConfig<Beneficiary, String> remarkColumn = new ColumnConfig<Beneficiary, String>(props.remark(), 200, constants.remark());

    beneficiaryColumn.setCell(new AbstractCell<BeneficiaryName>() {
        @Override
        public void render(Context context, BeneficiaryName value, SafeHtmlBuilder sb) {
            if (value != null) {
                sb.appendEscaped(value.getName());
            } else {
                sb.appendEscaped(constants.emptyGridItem());
            }
        }
    });
    remarkColumn.setCell(new AbstractCell<String>() {
        @Override
        public void render(Context context, String value, SafeHtmlBuilder sb) {
            if (value != null) {
                sb.appendEscaped(value);
            } else {
                sb.appendEscaped(constants.emptyGridItem());
            }
        }
    });
    List<ColumnConfig<Beneficiary, ?>> l = new ArrayList<ColumnConfig<Beneficiary, ?>>();
    l.add(beneficiaryColumn);
    l.add(remarkColumn);
    ColumnModel<Beneficiary> cm = new ColumnModel<Beneficiary>(l);

    beneficiaryListStore = new ListStore<Beneficiary>(new ModelKeyProvider<Beneficiary>() {
        @Override
        public String getKey(Beneficiary item) {
            return item.toString();
        }
    });
    Grid<Beneficiary> grid = new Grid<Beneficiary>(beneficiaryListStore, cm);
    grid.getView().setStripeRows(true);
    grid.getView().setForceFit(true);
    //EDITING
    SimpleComboBox<BeneficiaryName> combo = new SimpleComboBox<BeneficiaryName>(new LabelProvider<BeneficiaryName>() {
        @Override
        public String getLabel(BeneficiaryName item) {
            return item.getName();
        }
    });
    combo.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
    ProgramFieldsPresenter.fillBeneficiaryNameEditingCombo(combo);

    final GridEditing<Beneficiary> editing = new GridRowEditing<Beneficiary>(grid);
    editing.addEditor(beneficiaryColumn, combo);
    editing.addEditor(remarkColumn, new TextField());

    editing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<Beneficiary>() {
        @Override
        public void onCompleteEdit(CompleteEditEvent<Beneficiary> event) {
            beneficiaryListStore.commitChanges();
        }
    });

    //EDITING
    TextButton add = new TextButtonBuilder(constants.add())
            .selectHandler(new SelectEvent.SelectHandler() {
                @Override
                public void onSelect(SelectEvent event) {
                    Beneficiary b = new Beneficiary();

                    editing.cancelEditing();
                    beneficiaryListStore.add(0, b);
                    editing.startEditing(new Grid.GridCell(0, 0));
                }
            }).build();
    ToolBar bar = new ToolBar();
    bar.add(add);

    vlc = new VerticalLayoutContainer();
    vlc.setBorders(true);
    vlc.add(bar, new VerticalLayoutContainer.VerticalLayoutData(1, -1));
    vlc.add(grid, new VerticalLayoutContainer.VerticalLayoutData(1, 1));

}

/**
 * <B>Copies</B> Beneficiary and then adds to the ListStore
 * @param beneficiaries
 */
public void setValueSafe(List<Beneficiary> beneficiaries) {
    beneficiaryListStore.clear();
    for (Beneficiary origin : beneficiaries) {
        Beneficiary b = new Beneficiary();
        b.setId(origin.getId());
        b.setRemark(origin.getRemark());
        b.setBeneficiaryName(origin.getBeneficiaryName());
        b.setProgram(origin.getProgram());

        beneficiaryListStore.add(b);
    }
}

public List<Beneficiary> getValue() {
    return new ArrayList<Beneficiary>(beneficiaryListStore.getAll());
}


@Override
public Widget asWidget() {
    return vlc;
}

}

此小部件如下所示: enter image description here

我想验证Grid的listrore是否为空。如果它为空,则在vlc(VerticalLayoutContainer)边框上显示整个小部件的错误消息。

0 个答案:

没有答案