ControlSFX ValidationsUpport: Покажите ошибки проверки на загрузке и оставьте кнопку OK отключено до действительного ввоJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 ControlSFX ValidationsUpport: Покажите ошибки проверки на загрузке и оставьте кнопку OK отключено до действительного вво

Сообщение Anonymous »

Я работаю над приложением 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»