2011-08-09 57 views
1

在軟件設計方式中,最好的方法是:使用JSF驗證程序或使用Controller(管理bean)檢查數據庫中的唯一輸入(例如用戶名)。顯然,在JSF框架中,我不能在Validator中使用@EJB,所以如果我使用Validator進行檢查,那麼我將不得不以另一種方式連接到數據庫(jdbc連接或其他方式) 。 如果我在控制器中檢查這一個,我將不得不將一些不必要的邏輯作爲該過程的一部分(例如:createUser方法)。關於設計的問題使用JSF框架進行驗證

那麼,根據JSF框架,最好的方法是什麼?

回答

3

顯然,在JSF框架,我不能在驗證使用@EJB,這樣的情況下,我使用驗證的檢驗,那麼我就必須連接到數據庫以另一種方式(JDBC連接或者其他的東西)。

沒錯。一個常見的解決方法是聲明並使用驗證器作爲@ManagedBean

E.g.

@ManagedBean 
@RequestScoped // Can be @ApplicationScoped if it does not hold any state. 
public class UsernameValidator implements Validator { 

    @EJB 
    private UserService userService; 

    // ... 
} 

<h:inputText validator="#{usernameValidator.validate}" /> 

<h:inputText> 
    <f:validator binding="#{usernameValidator}" /> 
</h:inputText> 
+1

宏偉BalusC ... – lionheart

+0

不客氣。 – BalusC

+0

A Primefaces觀察:我注意到在裏面使用(如本答案中所述)不起作用(注入的EJB上的空指針異常)。然而,如上所述在的驗證器屬性內使用EL表達式完美地工作。 – 8bitjunkie