Я работаю над приложением Javafx + Spring Boot, используя шаблон MVVM. Мы используем ValidationsFx ValidationsUpport для проверки полей в форме входа в систему. Пропустите < /p>
< /li>
< /ul>
Пример: < /p>
У нас есть диалог для создания нового пользователя с этими полями: < /p>
Имя пользователя (Textfield) < /li>
Пароль (пароль) < /> (Пароль) < /li>
< /ul>
Мы регистрируем валидаторы, например: < /p>
@Component
public class ValidationHelper {
public void registerUserRegistrationValidations(ValidationSupport validationSupport, TextField userName,
PasswordField password, PasswordField repeatPassword) {
registerFocusLostValidation(userName, getEnteredUserNameDataLengthValidator(), validationSupport);
registerFocusLostValidation(password, getEnteredPasswdDataLengthValidator(), validationSupport);
registerFocusLostValidation(repeatPassword, getEnteredPasswdDataLengthValidator(), validationSupport);
registerFocusLostValidation(repeatPassword, getEnteredPasswordsEqualValidator(repeatPassword), validationSupport);
}
private Validator getEnteredUserNameDataLengthValidator() {
return Validator.createPredicateValidator(
userName -> userName != null && ((String) userName).length() > 2,
"user name too short");
}
private Validator getEnteredPasswdDataLengthValidator() {
return Validator.createPredicateValidator(
pin -> pin != null && ((String) pin).length() > 2,
"Password too short");
}
private Validator getEnteredPasswordsEqualValidator(PasswordField passwdField) {
return Validator.createPredicateValidator(
password -> password != null && password.equals(passwdField.getText()),
"Passwords do not match");
}
private void registerFocusLostValidation(Control control, Validator validator, ValidationSupport validationSupport) {
validationSupport.registerValidator(control, false, validator);
}
}
< /code>
Мы также делаем это, чтобы связать глобальный флаг: < /p>
BooleanBinding isInvalid = Bindings.createBooleanBinding(
() -> !validationSupport.getValidationResult().getErrors().isEmpty(),
validationSupport.validationResultProperty()
);
validationState.formInvalidProperty().bind(isInvalid);
< /code>
Затем в контроллере нижнего колонтитула: < /p>
okButton.disableProperty().bind(validationState.formInvalidProperty());
< /code>
проблема < /strong> < /p>
Это в основном работает, но только после того, как пользователь начинает печатать. Пароль) < /li>
Проверка для повторного пароля запускается только после потери фокуса < /li>
< /ul>
Мы хотим, чтобы проверка появилась, как только отображается форма, без взаимодействия с пользователем. /> Мы попытались настроить обязательный = true в Registervalidator < /li>
Мы также попытались вызвать проверки upport.getvalidationresult (). geterrors () вручную
, но начальное состояние всегда рассматривается как «допустимый». Здесь:
https://pastes.io/demo-project
Любые идеи о том, как немедленно сделать триггер проверки и убедиться, что кнопка OK ведет себя правильно с самого начала?
>
Подробнее здесь: https://stackoverflow.com/questions/795 ... -ok-button
ControlSFX ValidationsUpport: Покажите ошибки проверки на загрузке и оставьте кнопку OK отключено до действительного вво ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Показать ошибки проверки при загрузке и отключить кнопку OK до действительного ввода
Anonymous » » в форуме JAVA - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-