Вы можете использовать GWT Bean Validation, который является частью GWT 2.4 и работает нормально, хотя все еще находится в экспериментальном состоянии (см. http://code.google.com/p/google-web-toolkit/wiki/BeanValidation). GWT Bean Validation поддерживает аннотации JSR303. Это означает, что вы можете определить ограничения Ваши объекты передачи данных (DTO). Мы используем его вместе с GWT RequestFactory и GWT Editor Framework.
Теперь, если вы хотите изменить стиль виджета, вы можете реализовать что-то похожее на ValueBoxEditorDecorator
. Вот пример того, как вы можете написать такой декоратор для вашего виджета и добавить класс css (как предложил Алекс):
public class MyWidgetDecorator<T> extends Composite implements
HasEditorErrors<T>, IsEditor<ValueBoxEditor<T>> {
// ...
@UiField
SimplePanel container;
@UiField
DivElement errorLabel;
// ...
/**
* Sets the widget that is to be decorated.
*/
@UiChild(limit = 1, tagname = "content")
public void setContent(ValueBoxBase<T> widget) {
container.add(widget);
// ... if using the editor framework, initialize the widget as editor
}
public void showErrors(List<EditorError> errors) {
StringBuilder sb = new StringBuilder();
for (EditorError error : errors) {
if (error.getEditor().equals(editor)) {
sb.append("\n").append(error.getMessage());
}
}
if (sb.length() == 0) {
errorLabel.setInnerText("");
errorLabel.getStyle().setDisplay(Display.NONE);
if (container.getWidget() != null) {
container.getWidget().removeStyleName("violation"); // remove css class on widget
}
return;
}
errorLabel.setInnerText(sb.substring(1));
errorLabel.getStyle().setDisplay(Display.INLINE_BLOCK);
if (container.getWidget() != null) {
container.getWidget().addStyleName("violation"); // add css class on widget
}
}
}
В методе showErrors(...)
класс CSS, называемый «проверка», добавляется к виджету (например, текстовое поле). В классе css вы можете определить красную рамку для виджета, чтобы проиллюстрировать, например, неверный ввод.
Кстати, хорошее объяснение того, как использовать GWT Editor Framework , можно найти в этом ответе .