2011-03-22 54 views
0

如何爲複合組件實現交叉字段驗證?我使用的複合組件是一個輸入文本框(一個用於電子郵件,另一個用於確認電子郵件)。我爲confirmEmail組件應用了f:validator標籤。如何在validate方法中獲取電子郵件複合組件的值。它是UIComponent還是UINamingContainer?複合組件的交叉字段驗證

+0

[JSF2.0不支持交叉字段驗證,是否有解決方法?](http://stackoverflow.com/questions/6282466/jsf2-0-doesnt-support-cross-field-驗證是否有解決方法) – 2012-07-03 12:35:29

回答

0

從技術上講,你的組合是UINamingcontainer,但任何組件都可以找到它的子組件。

我懷疑類似於下面的東西應該工作

public void validate(FacesContext context, UIComponent component, Object value) { 
    UIInput first = (UIInput)component.findComponent("compositesFirstInputID"); 
    UIInput second = (UIInput)component.findComponent("compositessecondInputID"); 

    Object firstEntry = first.getSubmittedValue(); 
    Object secondEntry = second.getSubmittedValue(); 
    if(!firstEntry.equals(secondEntry)) 
     throw new ValidatorException(...); 
} 

可能要添加一些空的檢查,可能是修剪(),並使用equlasIgnoreCase。

+0

@deepti錯讀你的問題 - 以爲你有一個具有兩個輸入的組合,而使用頁面的組合引用有一個孩子f:驗證。 – JimO 2011-03-26 05:25:57

0

我已經實現了上面討論的驗證方法。我認爲我的代碼的問題是在複合組件上使用f:validate標記的位置。

<eg:inputText id="confirmEmail" value="backingbean.email"/> 

<eg:inputText id="email" value="backingbean.email"> 
<f:validator validatorId="core.jsf.CompareValidator" for="inputText"/> 
</eg:inputText> 

但是,當我提交表單驗證器沒有被調用。我是否應該在組件上包裝驗證器,或者這是實現的正確方法。