JSF 2 повторно использует проверку, определенную в объектах JPA? - PullRequest
2 голосов
/ 21 марта 2011

Начнем с примера:


В моей сущности JPA

public class User {
    @Pattern("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$", message="invalidEmailResourceBundleKey")
    private String email;

    @Min(5, message="minimumResourceBundleKey")
    private int age;

...
}

В моем JSF Bean

public class UserBean {
    private User user;

    // do i have to redefine it here, since it's already a part of the user ?
    @@Pattern("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$") 
    public String getEmail() {
        return user.getEmail();
    }
    public void setEmail(String s) {
        user.setEmail(s);
    }

    // do i have to redefine it here, since it's already a part of the user ?
    @Min(5, message="minimumResourceBundleKey")
    public int getAge() {
        return user.getAge();
    }
    public void setAge(int age) {
        user.setAge(age);
    }
}

Можно ли повторно использовать проверки для сущностей для bean-компонентов JSF, которые фактически делегируют вызовы методов сущностям, так что мне не нужно переопределять валидацию bean-компонентов на bean-компонентах JSF?

Можно ли даже расширить повторное использование до уровня сообщения об ошибке в пакете ресурсов и можно ли параметризовать сообщение с помощью {0} и т. Д., Как обычно? Интересно, есть ли в Интернете какой-нибудь пример для этого, так как я не смог найти ни одного.

Пожалуйста, поделитесь своими мыслями по этому поводу.

Спасибо!

1 Ответ

7 голосов
/ 21 марта 2011

Вам не нужно переопределять их, если вы не излишне выравниваете свойства bean-компонентов.Вместо этого просто укажите getUser().

public class UserManager {

    private User user;

    public User getUser() {
        return user;
    }

}

и напрямую свяжите со свойствами сущности JPA.

<h:inputText value="#{userManager.user.email}" />
<h:inputText value="#{userManager.user.age}" />

Вне зависимости от конкретной проблемы, регулярное выражение вашей электронной почты будетсбой для интернационализированных доменных имен (IDN), которые были введены в прошлом году.Я бы исправил регулярное выражение, чтобы не только принимать латинские символы.См. Также этот ответ для примера.

...