2014-10-22 28 views
2

如何在以下情況下禁用Wicket的內部窗體驗證?在wicket中禁用嵌套窗體驗證

外部窗體有一些帶驗證器的字段,包括TextField。當用戶關注TextField並按下Enter時,應該提交外部表單。

內部表單也有一些字段與驗證器和提交按鈕。

按下外部形式的輸入TextField嘗試提交表單,但也在內部表單中運行validatators,我想阻止這種情況。

除了在內部窗體中使用setDefaultFormProcessing(false)並在onSubmit方法內重寫驗證邏輯之外,還有其他方法嗎?

回答

2

Form組件正在驗證時,它會檢查它的所有嵌套表單並僅在其方法isEnabledInHierarchy() && isVisibleInHierarchy()返回true時驗證它們。你不能覆蓋validate()方法(只有onValidate(),但它經過實際驗證處理後執行),所以我看到的唯一選項(與您的限制)是在外表處理時禁用嵌套窗體。

你必須重載process()方法外形式是這樣的:

final Form<Void> innerForm =....; 

final Form<Void> outerForm = new Form<Void> ("outer") 
{ 
    public void process (IFormSubmitter submittingComponent) 
    { 
     innerForm.setEnabled (false); 
     super.process (submittingComponent); 
     innerForm.setEnabled (true); 
    } 
}