2

让我们从一个例子开始:


在我的 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);
    }
}

是否可以重用实际将方法调用委托给实体的 JSF bean 的实体验证,这样我就不必重新定义 JSF bean 上的 bean 验证?

我什至可以将重用扩展到资源包中的错误消息级别,以及是否可以像往常一样使用 {0} 等参数化消息?我想知道网络上是否有任何示例,因为我一直找不到。

请分享您对此的想法..

谢谢 !

4

1 回答 1

7

如果您没有不必要地展平 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) 将失败。我会修复正则表达式,使其不仅接受拉丁字符。另请参阅此答案以获取示例。

于 2011-03-21T11:45:51.707 回答