Есть способ добиться этого эффекта.
Сначала вам нужно создать тему для vaadin-text-field
. Создайте файл text-field-theme.css
в папке frontend/styles
с содержимым:
:host([class="warn"]) [part="error-message"] {
color: orange;
}
:host([invalid][class="warn"]) [part="input-field"] {
background-color: rgba(255, 166, 0, 0.1);
box-shadow: inset 0 0 0 1px orange;
}
. С этим кодом вы сказали: когда текстовое поле имеет класс «предупреждение», сообщение об ошибке оранжевого цвета, а рамка вокруг поля ввода оранжевого цвета и поля ввода фон прозрачный (0,1) оранжевый.
Затем импортируйте его в виде:
@CssImport(value = "./styles/text-field-theme.css", themeFor = "vaadin-text-field")
Затем вы связываете поле с двумя валидаторами, один с условием ошибки, а второй с условием предупреждения:
TextField textField = new TextField();
binder.forField(textField)
.withValidator(e -> {
textField.removeClassName("warn");
return e.length() > 3;
}, "You must enter more than 3 characters", ErrorLevel.ERROR)
.withValidator(e -> {
textField.addClassName("warn");
return e.length() > 5;
}, "Maybe you should enter more than 5 characters", ErrorLevel.WARNING)
.bind(Person::getName, Person::setName);
Это будет работать с binder.validate().isOk()
, как и ожидалось. Например, если вы введете 3 или менее символов, вы увидите красное сообщение об ошибке и binder.validate().isOk()
вернет false
.
И когда вы введете 4 или 5 символов, вы увидите желтое предупреждающее сообщение и binder.validate().isOk()
вернет true
.
Для синего информационное сообщение процесс такой же. Просто продублируйте код в css файле для класса "info" и выберите синий цвет. Затем создайте третий валидатор для информационного условия. Не забудьте добавить класс «info» и удалить его в других условиях валидатора (ошибка, предупреждение).