2010-04-20 76 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 
     } 

     } 

    } 
} 
相关问题