Проверка JSF с использованием DAO не работает - PullRequest
0 голосов
/ 30 мая 2018

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

Проблема в том, что если я введу существующий почтовый адрес, он выдаст исключение NonUniqueResultException, но также сохраняет нового пользователя с дубликатом почтового адреса в базе данных.Не понимайте этого, потому что после неудачной проверки проверка жизненного цикла JSF невозможна, она не должна переходить к фазе вызова приложения, верно?

Вот мой код:

  1. mailполе в регистре формуляр

<b:inputText id="mail" required="true"
                                 requiredMessage="Bitte geben Sie Ihre E-Mail-Adresse an!"
                                 label="E-Mail" placeholder="name@example.com" value="#{registrierenManagedBean.nutzer.mail}">
                        <f:validator validatorId="mailValidatorRegistrieren"/>
                        <b:messages for="mail"/>
                    </b:inputText>
мой пользовательский валидатор

@FacesValidator("mailValidatorRegistrieren")
public class MailValidatorRegistrieren implements Validator {

    @EJB
    private DAO dao;
    private String mail;
    private static final Pattern EMAIL_PATTERN =
            Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);

    @Override
    public void validate(FacesContext facesContext, UIComponent uiComponent, Object o) throws ValidatorException {
        mail = (String)o;
        boolean matchesPattern = EMAIL_PATTERN.matcher(mail).find();

        if(!matchesPattern)
        {
            throw new ValidatorException((new FacesMessage("Invalid mail")));
        }

        if(mail.isEmpty()) {
            return;
        } else if(validateNutzer(mail)){
            throw new ValidatorException(new FacesMessage("mail alredy used"));
        } else{
            return;
        }

    }

    private boolean validateNutzer(String mail) {
        try {
            Nutzer n = dao.findNutzerByMail(mail);
            return n.getMail().equals(mail);
        } catch (NullPointerException e) {
            return false;
        }
    }
}
и метод "findNutzerByMail" из моего DAO

public Nutzer findNutzerByMail(String mail) {
        try {
            return em.createNamedQuery("findNutzerByMail", Nutzer.class)
                    .setParameter("mail", mail)
                    .getSingleResult();
        } catch (NoResultException e) {
            return null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...