Ваадин, как автоматически подключить компонент Spring в пользовательском валидаторе ограниченийJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ваадин, как автоматически подключить компонент Spring в пользовательском валидаторе ограничений

Сообщение Anonymous »

Я работаю над приложением, использующим Spring Boot для серверной части и vaadin для внешнего интерфейса. Мне нужно добавить проверку, которая должна выполнить проверку базы данных — зарегистрирован ли адрес электронной почты в этом конкретном примере.
Пример того, чего я хочу достичь:

Код: Выделить всё

@Component
public class EmailExistsValidator implements ConstraintValidator {

private final UserRepo userRepo;

@Autowired
public EmailExistsValidator(UserRepo userRepo) {
this.userRepo = userRepo;
}

@Override
public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
//check email does not exist logic here
}
}
Я успешно использовал эту настройку в приложениях Spring MVC и Spring Rest без каких-либо дополнительных настроек. К сожалению, вышеизложенное не работает с vaadin. После некоторой отладки я обнаружил, что Spring действительно создает и управляет этими компонентами, но используются не они. Вместо этого vaadin создает и управляет другими экземплярами ConstraintValidator, когда происходит фактическая проверка. Проверка выполняется с помощью Binder.writeBeanIfValid(), если это имеет значение.
Я прошел:
  • Autowired Repository в пользовательском валидаторе ограничений имеет значение NULL.
  • Spring Boot: репозиторий не подключается автоматически в пользовательском валидаторе.
  • Все вопросы, указанные выше, являются возможными решениями.
  • Все вопросы, указанные выше, являются возможными решениями
  • li>
    Еще несколько вопросов, которые, к сожалению, я больше не могу найти.
  • Я попробовал получить WebApplicationContext, чтобы использовать AutowireCapableBeanFactory.autowireBean() для автоматического связывания аннотированных полей. Неудивительно, что контекст был нулевым, когда vaadin создавал экземпляр или управлял им, поэтому это не сработало.
Что я сейчас использую.< /h1>

Код: Выделить всё

@Component
public class EmailExistsValidator implements ConstraintValidator {

private static UserRepo repo;

private final UserRepo userRepo;

public EmailExistsValidator() {
this.userRepo = repo;
}

@Bean
public static UserRepo setRepo(UserRepo userRepo) {
repo = userRepo;
return repo;
}

@Override
public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
//validation logic
}
}
Этот подход основан на этом ответе (из второго вопроса, который я связал). Он выполняет свою работу (только это сработало для меня), но на мой вкус он слишком хакерский.
Как настроить vaadin для использования управляемых Spring ConstraintValidator , а не управляемые ваадином? Или как я могу автоматически связать компоненты пружины в ConstraintValidator, созданных и управляемых vaadin?

Подробнее здесь: https://stackoverflow.com/questions/738 ... -validator
Ответить

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

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

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

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

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