IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wicket Java Discussion :

FeedbackPanel ne marche pas sous Chrome


Sujet :

Wicket Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut La validation de formulaire ne marche pas sous Chrome
    Bonjour,

    J'utilise des FeedbackPanel pour notifier des erreurs dans la saisie d'un formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    FeedbackPanel fdPanel = new FeedbackPanel("feedback");
    fdPanel.setFilter(new IFeedbackMessageFilter() {
        @Override
        public boolean accept(FeedbackMessage message) {
            return !message.isRendered() && message.getReporter() == textfield;
        }
    });
    fdPanel.setOutputMarkupId(true);
    add(fdPanel);
    Et pour notifier l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    textfield.error("Message d'erreur");
    Ensuite, mon formulaire est validé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    final Button valider = new Button(Constantes.BOUTON_VALIDER) {
        @Override
        public void onSubmit() {
            if (!validation()) {
                setResponsePage(SouscriptionForm.this.webpage);
            }
            else {
                Class<? extends MessagePage> redirect = soumettreFormulaire();
                setResponsePage(redirect);
            }
        }
    };
    add(valider);
    La notification marche très bien sous IE et Firefox, mais pas sous Chrome. Pensez-vous qu'il s'agit d'une erreur de ma part (et dans ce cas laquelle) ou bien s'agit-il d'un bug wicket ?

  2. #2
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    bonsoir verbose

    Tout le traitement de remontée d'erreur se fait côté Java, par Wicket, une fois le formulaire soumis. La dépendance au navigateur ne se fait que pour la récupération des valeurs présentes dans le formulaire. A la fin de tout ce cycle, il y a bien sûr le problème de l'affichage, mais bon en général les navigateurs maitrisent pas mal la chose

    Aussi, perso, je chercherai plutôt du côté du submit, surtout s'il est "javascripté/ajaxifié", ce que ce morceau peut laisser penser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fdPanel.setOutputMarkupId(true);
    .

    Si cela marche bien avec FF et IE, le "fonctionnel" côté Java peut probablement être ignoré : autant se concentrer sur le traitement du submit et l'affichage final. Pour le submit, je tenterai de mettre un point d'arret dans la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	public void process(IFormSubmittingComponent submittingComponent)
    .

    J'aurai bien tenté de reproduire l'erreur de mon côté, mais le code fourni est incomplet.

    Au demeurant, je ne sais pas ce qu'il se passe précisément ? Les onSubmit se déclenchent ils ? Y a t il de l'ajax et la fenetre de debug qui va bien ? Si oui, quels sont les infos affichées ? Les logs sont ils également bien activés ? => wicket informe quand des notifications ne sont pas affichées.

    bonne recherche !
    ++

    EDIT : et bien sûr toutes les précautions d'usage: est ce avec la dernière version ? Y a t il des bugs connus qui pourraient expliquer la chose ? Tenter par exemple une recherche avec chrome dans le jira (http://issues.apache.org/).

    2eme EDIT : et merci pour , je ne l'avais jamais vu !


  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Alors en effet, je ne passe pas dans le onSubmit() Voilà qui est bien facheux

    J'utilise Ajax uniquement pour changer la couleur du bouton lorsque l'utilisateur clique sur une checkbox, mais pas pour valider le formulaire.

    Les logs font apparaître qu'il y a bien un évènement qui survient côté serveur au moment où je soumet le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Mar 08 13:43:27 btw55566 [[EXECUTABLE]][-] : -dm4yLJnhjbnSqpWNLpjRv03mDr6tJ1Jl8zbPV42thnnd6pGBwRH0;DEBUG;persistSession;[[APPLICATIF]];;Flush des objets contenus en mémoire;;
    Mar 08 13:43:27 btw55566 [[EXECUTABLE]][-] : toto-dm4yLJnhjbnSqpWNLpjRv03mDr6tJ1Jl8zbPV42thnnd6pGBwRH0;DEBUG;persistSession;[[APPLICATIF]];;Flush des objets contenus en mémoire;;
    Voici le code html de mon bouton de validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="image" wicket:id="valider" onclick="submit()" src="../images/btn-valider-adhesion.gif"/>

  4. #4
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Citation Envoyé par verbose Voir le message
    Alors en effet, je ne passe pas dans le onSubmit() Voilà qui est bien facheux
    hum, attention : si wicket détecte une erreur de validation avant, alors le onSubmit n'est pas appelé même si le submit du formulaire a bien fonctionné. Essaie plutot de surcharger le onValidate de ton formulaire pour voir si l'appel arrive bien au serveur (NB : utiliser onValidate est une mauvaise pratique, faut plutot aller vers les AbstractFormValidator).

    Concernant le point d'arret dans la méthode "process" de la class Form, cela a t il donné quelque chose ?

    Enfin, je viens de faire une recherche google sur "chrome javascript submit" et il y a pas mal de hits...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Alors oui, on passe bien dans le onValidate().

    Pour le point d'arrêt dans le process, je ne vois rien d'anormal. Le submitting component est null étant donné que le formulaire est validé via javascript. Par contre les paramètres de la page sont également null. Je ne sais pas trop à quoi ça correspond. En tous les cas, la méthode retourne sans lever d'exception. Je ne sais pas trop comment interpréter ce qu'il se passe dans cette méthode.

    [EDIT]
    J'ai essayé sous Firefox où la validation du formulaire fonctionne. Et là le submitting component dans la méthode process est différent de null.
    [/EDIT]

    Pour la requête google, je n'ai rien trouvé d'intéressant. Il y a juste un hit dans lequel est dit qu'il n'est pas possible de valider un formulaire sous chrome via js. Mais j'ai fais un simple test et ça marche. Donc le problème ne vient pas du formulaire. D'autant que comme tu le signale, le serveur reçois bien une requête puisqu'on passe dans le onValidate().

    Maintenant, je ne comprends pas pourquoi cette requête n'aboutie pas côté serveur.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    En me penchant de plus près sur le code, il semble que le problème est bien dû au fait que le submitting component est null dans la méthode process. Car dans ce cas, on appelle pas la méthode submit.

    Y a-t-il un moyen de contourner ce problème, ou bien est-ce dû à un bug de Chrome ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Ca y est j'ai trouvé !!!!

    J'ai ajouté une fonction javascript pour chercher le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function soumettre() {
        document.getElementByName('souscriptionForm').submit();
    }
    Puis j'appelle cette fonction à la place du submit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="image" wicket:id="valider" onclick="soumettre()" src="../images/btn-valider-adhesion.gif"/>
    Merci beaucoup pour ton aide joseph, tu m'as bien aidé à comprendre la cause du problème

    [EDIT] Je renomme le titre du topic pour aider les personnes qui auraient le même problème que moi à le retrouver plus facilement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Imprimer IFrame ne marche pas sous Google Chrome
    Par houssem86 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/03/2014, 09h50
  2. multiple="multiple" ne marche pas sous IE et chrome
    Par sajodia dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/11/2010, 16h12
  3. fonction append ne marche pas sous chrome
    Par CyrilG dans le forum jQuery
    Réponses: 3
    Dernier message: 26/05/2010, 11h00
  4. URGENT : Request.Form ne marche pas sous IE6
    Par Laurent Outan dans le forum ASP
    Réponses: 9
    Dernier message: 16/07/2004, 15h25
  5. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo