#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