代码之家  ›  专栏  ›  技术社区  ›  Brian Laframboise

当Wicket AjaxFormValidatingBehavior验证失败时阻止浏览器表单提交

  •  4
  • Brian Laframboise  · 技术社区  · 16 年前

    我有一个带有向导组件的页面。用户可以使用 下一个 以前的 按钮,我有执行完整(非ajax)的表单提交,使应用程序是回按钮友好。

    下一个 单击按钮,我想尝试ajax表单验证(如果启用了javascript)。我试着做:

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

    添加这样的验证。行为有效-但是,当发生验证错误时,浏览器仍然提交整个表单。

    在这种情况下,防止浏览器提交表单的wicket方法是什么?

    2 回复  |  直到 11 年前
        1
  •  0
  •   schmimd04    16 年前

    重写 onError() 方法在窗体或 AjaxFormValidatingBehavior . 如果你这样做的行为,我不确定是否会阻止表单提交。

    new AjaxFormValidatingBehavior( form, "onsubmit") {
       public void onSubmit() {}
       public void onError() {}
    }
    
        2
  •  0
  •   guicey    11 年前

    可能有点晚了,但答案是:

    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
            }
    
          }
    
       }
    }