Вопрос об использовании FacesValidator (JSF Validation) и Bean Validation в одном поле - PullRequest
2 голосов
/ 27 сентября 2011

у меня есть поле электронной почты который я хочу проверить, что это действительный адрес электронной почты, и проверить, что он не существует в базе данных, поэтому я использовал для действительного шаблона электронной почты @Email from hibernate в bean-компоненте:

@NotBlank(message = "{email.required}")
@Email(message = "{invalid.email}")
@Size(max = 25, message = "{long.value}")

и на странице jsf:

<f:validator binding="#{emailExistValidator}" />

мои вопросы:

  1. Что происходит сначала, валидатор лиц или валидация бина?
  2. Что вы думаете об этом смешении между проверкой бина и FacesValidator, это плохая практика, если да, что вы предлагаете?

1 Ответ

6 голосов
/ 27 сентября 2011

1- Что происходит первым: валидатор граней или валидация бина?

Преобразование и валидация JSF будут выполняться первыми в том порядке, в котором они были объявленыкомпонент, с required первым.Если что-то из этого не получается, остаток проверки JSF и всей проверки bean-компонента полностью пропускается, в противном случае выполняется вся проверка bean-компонента.


2- Что выПодумайте об этом смешении между проверкой бина и FacesValidator, это плохая практика, если да, что вы предлагаете?

Трудно ответить.Это зависит исключительно от функциональных требований и цели валидатора, а также от того, насколько тесно валидация связана с моделью или представлением.

Если проверка должна запускаться каждый раз , свойство моделиустановить (то есть он тесно связан с моделью), тогда проверка бобов будет предпочтительнее.Но если проверка должна выполняться только один раз, например, во время регистрации (то есть она тесно связана с конкретным представлением), тогда проверка JSF будет предпочтительнее.

Например, если вы проверяете шаблон синтаксиса электронной почты, проверка бобов будет иметь больше смысла, например:

@Pattern(regexp = "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)", message = "Email is not in valid format")
private String email;

Если вы проверяете наличие электронной почты в БД,тогда валидатор JSF будет иметь больше смысла, поскольку вы не хотите, чтобы он выполнялся без необходимости на каждом наборе свойств.Вызовы БД недешевы сами по себе.

Опять же, это субъективно.Посмотрите, что лучше всего соответствует бизнес-требованиям.Возможно, вам необходимо проверить его на каждом наборе свойств, например.

...