2011-03-21 37 views
2

讓我們先從一個例子: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 bean的實體進行驗證,以便我不必重新定義JSF bean上的bean驗證?

我可以將資源包中錯誤消息的級別重用,並且消息是否可以像通常一樣用{0}等參數化?我想知道網絡上是否有這樣的例子,因爲我一直都找不到。

請在此分享您的想法..

謝謝!

回答

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)。我會修正正則表達式,不僅接受拉丁字符。例如,另請參閱this answer

+0

哇!如此簡單而優雅!哈哈。謝謝BalusC。你能不能也分享你對錯誤資源的看法。這將是很好,如果我可以以某種方式參數化錯誤資源。 Bean Validation中是否支持消息屬性?並且參數本身是否可以被使用? – bertie 2011-03-21 14:46:34

+0

不客氣。對不起,這是一個不同的問題,值得自己的話題。 – BalusC 2011-03-21 15:15:52

+0

即將發佈新話題:-) – bertie 2011-03-21 15:49:35