JSF 2 повторно использует проверку, определенную в объектах JPA?

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


В моем объекте 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-бине

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);
    }
}

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

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

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

Спасибо !


person Albert Gan    schedule 21.03.2011    source источник


Ответы (1)


Вам не нужно переопределять их, если вы не сглаживаете свойства 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), введенных в прошлом году. Я бы исправил регулярное выражение, чтобы оно принимало не только латинские символы. См. также этот ответ для примера.

person BalusC    schedule 21.03.2011
comment
Вау ! Так просто и элегантно! хаха. Спасибо BalusC. Не могли бы вы также поделиться своим мнением об ошибках ресурсов. Было бы неплохо, если бы я мог как-то параметризовать ресурсы ошибок. Поддерживается ли он в Bean Validation с атрибутом сообщения? А сам параметр можно i18ned? - person Albert Gan; 21.03.2011
comment
Пожалуйста. Извините, это другой вопрос, который заслуживает отдельной темы. - person BalusC; 21.03.2011