2010-04-20 67 views
4

我有一個帶有嚮導組件的頁面。用戶可以通過使用下一個以前的按鈕來導航向導的面板,我已經執行完整(非ajax)表單提交,以便該應用程序具有後退按鈕友好性。當Wicket AjaxFormValidatingBehaviour驗證失敗時,阻止瀏覽器表單提交

下一步按鈕被點擊,我想嘗試ajax表單驗證(如果啓用javascript)。我試過:

nextButton.add(new AjaxFormValidatingBehavior(form, "onsubmit")); 

添加這樣的驗證。該行爲有效 - 但是,當發生驗證錯誤時,瀏覽器仍會提交整個表單。

什麼是Wicket的方式來防止瀏覽器在這種情況下提交表單?

+0

不能使用isComplete()方法,在你的WizardStep?我認爲,如果您的步驟有效或無效,該方法應該返回true。這應該正確啓用/禁用按鈕。 – 2012-08-03 14:55:02

回答

0

覆蓋表格或AjaxFormValidatingBehavior上的onError()方法。如果你是這樣做的,我不確定這是否會阻止表單提交。

new AjaxFormValidatingBehavior(form, "onsubmit") { 
    public void onSubmit() {} 
    public void onError() {} 
} 
+0

謝謝,但是我可以通過onError()來停止提交嗎?看起來,在客戶端沒有腳本阻止完整的表單提交發生。我不知道如何防止這種情況發生,除非沒有驗證錯誤。我試着通過返回「return false;」來實現getFailureScript試圖壓制事件,但無濟於事。 – 2010-04-21 15:28:00

+1

將「FeedbackPanel」添加到表單頂部。然後在'onError()'中將其添加到目標,以便通過Ajax('target.addComponent(feedbackPanel)')刷新。如果存在驗證錯誤,則FeedbackPanel應顯示相應的錯誤消息。您還可以將自定義消息添加到面板('feedbackPanel.error(「驗證錯誤」)') – schmimd04 2010-04-21 17:40:40

0

也許有點晚,但這裏是答案:

public class SomePage extends WebPage { 

    private FeedbackPanel feedbackMessageError = new FeedbackPanel("feedbackTabAddEmpMesError", new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR)); 

    public SomePage(String id) { 

     final Form<Void> form = new Form<>("tabFormAddEmp"); 
     add(form); 

     //Name textfield cannot be empty 
     final FormComponent<String> tabAddEmpName = new RequiredTextField<>("tabAddEmpName", Model.of("")); 
     tabAddEmpName.setLabel(Model.of("Name")); 
     tabAddEmpName.setOutputMarkupId(true); 

     //Salarynumber has to be minimal 10 char long 
     final FormComponent<String> tabAddEmpLoon = new RequiredTextField<>("tabAddEmpLoon", Model.of("")); 
     tabAddEmpLoon.add(new StringValidator(10, null)).setLabel(Model.of("Salarynumber")); 
     tabAddEmpLoon.setOutputMarkupId(true); 

     final Button button = new Button("tabFormAddEmpBut"); 

     form.add(tabAddEmpName , tabAddEmpLoon, button); 

     button.add(new AjaxFormValidatingBehavior(form, "onclick") { 

     @Override 
     public void onError(AjaxRequestTarget target) { 
      //Add feedbackpanel to your html and voila! 
      target.add(feedbackMessageError); 
     } 

     @Override 
     protected void onSubmit(AjaxRequestTarget target) { 
      //Do some logic over here 
     } 

     } 

    } 
} 
相關問題