2012-11-04 58 views
0

我正在使用自己的驗證,但窗體的視圖(例如,如果某個組件無效)應該在檢票中突出顯示或自定義...處理反饋 - 在apache wicket中使用自定義驗證框架/對象的消息

因此,例如 我有我的檢票形式

<form wicket:id="inputForm"> 
     <p> 
      <label for="Recipient">Recipient</label> 
      <input wicket:id="Recipient" id="Recipient" type="text" size="40"/> 
     </p> 
     <p> 
      <label for="Details">Details</label> 
      <input wicket:id="Details" id="Details" type="text" size="40"/> 
     </p> 
</form> 

然後,我有我的Form.java:在這裏,我把我的Java對象「發票」的值,並使用onValidateModelObjects覆蓋檢票驗證,用我自己的驗證.. 。 這種方法只是調用一個簡單的自己創建ValidatorObject這需要驗證的照顧......

public InvoiceForm() { 
    ... 

    Form<Invoice> form = new Form("inputForm", formModel) { 
     /* 
     * Validation takes place here 
     */ 
     @Override 
     public void onValidateModelObjects() { 
      ValidationProcess vp = new ValidationProcess(); 
      vp.validate("Rules.js", r); 
      msg = ""; 
      if (vp.getConstraintViolations().size() > 0) { 

       for (String s : vp.getConstraintViolations()) { 
        msg = msg + s; 
       } 
      } else { 
       msg = "no errors."; 
      } 
     } 
    }; 

    //adding Textfields to the Form etc... 

... 
} 

我需要什麼:上面你可以看到我的errorMessages將被保存到字符串msg!現在,我要的是檢票藉此字符串,並將其應用到檢票FeedBackMessage系統或不過...

  1. 我需要,將在瞬間被渲染的成分...
  2. 我有將此組件的錯誤消息設置爲我的組件...

我該怎麼做?

我想我需要重寫一些方法,但我不知道哪些哪裏...

回答

0

我把它用下面的代碼工作:

... 
//Textfields or Form Components GO HERE... 

     @Override 
     public void onValidateModelObjects() { 
      ValidationProcess vp = new ValidationProcess(); 
      vp.validate("Rules.js", r); 
      msg = ""; 
      if (vp.getConstraintViolations().size() > 0) { 

       for (String s : vp.getConstraintViolations()) { 
        if (s.contains(";")) { 
         String[] splitted = s.split(";"); 
         String elementname = splitted[0]; 
         String errorMessage = splitted[1]; 

         if (elementname.equals("price")) { 
          //SET Error of Component 
          price.error(elementname + " " + errorMessage + ". "); 
          } else if (elementname.equals("recipient")) { 
          recipient.error(elementname + " " + errorMessage); 
         } 
        } 
       } 
      } 
     } 

//Rest of the Code 
1

有一種特殊的成分,FeedbackPanel,這是在網頁上顯示的驗證和提交錯誤。因此,將FeedbackPanel添加到具有表單的頁面。

然後Form.error()方法註冊此組件的錯誤反饋消息以在FeedbackPanel上顯示。例如,

@Override 
    public void onValidateModelObjects() { 
     ValidationProcess vp = new ValidationProcess(); 
     vp.validate("Rules.js", r); 
     if (vp.getConstraintViolations().size() > 0) { 
      msg = ""; 
      for (String s : vp.getConstraintViolations()) { 
       msg = msg + s; 
      } 
     } else { 
      msg = "no errors."; 
     } 
     error(msg, null); 
    } 

還要注意,你可以定義和附加的IFormValidator一個實現形式與Form.add()方法爲您進行確認。

+0

如何Form.error()正是工作的?假設我有2 componentes = 2 Textfields .... 1.Textfield稱爲價格和2. Textfield稱爲收件人....我將這些添加到我的表單....現在我如何獲得textfield價格並設置errorMessage價格的消息保存整型味精.....你寫錯誤(味精,空);但是,哪些組件會被使用? –

+0

我在我的ValidateModelObjects()方法中需要類似這樣的東西:if(component.name = price)然後將錯誤設置爲msg。 if(component.name = recipient)然後將錯誤設置爲msg。依此類推...... –

+0

Form.error()註冊一個關於將在FeedbackPanel中顯示給用戶的錯誤的字符串。在Form.onSubmit()中,您可以檢查Form.hasErrors()以檢查是否有任何錯誤已經註冊。 – divanov