2010-04-20 5 views
4

J'ai une page avec un composant Assistant. L'utilisateur peut naviguer dans les panneaux de l'assistant en utilisant les boutons suivants et précédents boutons que j'ai effectuer des soumissions de formulaire complet (non-ajax) afin que l'application est compatible avec les boutons de retour.Prévenir la soumission du formulaire de navigateur lors de la validation échoue Wicket AjaxFormValidatingBehaviour

Lorsque le bouton suivant est cliqué, je voudrais essayer la validation de formulaire ajax (si javascript est activé). J'ai essayé de faire:

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

pour ajouter une telle validation. Le comportement fonctionne - cependant, lorsque des erreurs de validation se produisent, le navigateur soumet toujours le formulaire entier.

Quelle est la façon Wicket pour empêcher le navigateur de soumettre le formulaire dans ce cas?

+0

Tu ne peux pas utiliser la méthode isComplete() dans votre WizardStep? Cette méthode, je pense, devrait retourner vrai si votre démarche est valide ou non. Cela devrait activer/désactiver les boutons correctement. –

Répondre

0

remplacer la méthode onError() soit sur la forme ou la AjaxFormValidatingBehavior. Si vous le faites sur le comportement, je ne suis pas sûr si cela empêchera le formulaire de soumettre ou non.

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

Merci, mais que puis-je mettre dans onError() pour arrêter la soumission si? Il semble que du côté client, aucun script n'empêche la soumission de formulaires complets. Je ne suis pas sûr de savoir comment empêcher cela, à moins qu'il n'y ait aucune erreur de validation. J'ai essayé d'implémenter getFailureScript en retournant "return false;" pour tenter d'écraser l'événement, mais en vain. –

+1

Ajoutez un 'FeedbackPanel' en haut de votre formulaire. Ensuite, dans 'onError()', vous l'ajoutez à la cible pour qu'elle soit rafraîchie via Ajax ('target.addComponent (feedbackPanel)'). S'il y a des erreurs de validation, le FeedbackPanel devrait montrer les messages d'erreur correspondants. Vous pouvez également ajouter des messages personnalisés au panneau ('feedbackPanel.error (" Validation Error ")') – schmimd04

0

Peut-être un peu à la fin mais voici la réponse:

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 
     } 

     } 

    } 
} 
Questions connexes