GWT GXT добавить валидатор в композит

#gwt #gxt

#gwt #gxt

Вопрос:

У меня есть пользовательский виджет (составной). Я хочу проверить этот композит (на стороне клиента) с помощью моей логики. Я хочу показать сообщение об ошибке на границе с этим компонентом, например, TextFild.isValid() does .

 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;
}
  

}

этот виджет выглядит следующим образом: введите описание изображения здесь

Я хочу проверить, пуст ли список Grid или нет. Если он пуст, отобразите сообщение об ошибке для всего виджета, в моем случае на vlc границе (VerticalLayoutContainer).

Комментарии:

1. Где ты застрял? Пожалуйста, поделитесь своим кодом для более быстрой помощи.

2. смотрите мой код. Я только хочу показать сообщение об ошибке и красную границу VerticalLayoutContainer