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

JSF Java Discussion :

Probl�me avec le Javascript du commandLink sur Firefox


Sujet :

JSF Java

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par d�faut Probl�me avec le Javascript du commandLink sur Firefox
    Bonjour,

    J'ai une application JSF (1.2 avec Facelets, Richfaces, etc) qui �tait exclusivement destin�e � IE6. D�sormais, on doit g�rer aussi Firefox (ouf !).


    J'ai une page contenant un formulaire, avec un bouton qui rafraichit ce formulaire. Lors du rafraichissement, j'ajoute des liens (<h:commandLink>) dans ce formulaire. En gros, j'ai un truc comme �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    <h:form id="toto">
        ...
        <a4j:commandButton ... reRender="toto"/>
        ...
        <h:commandLink .../>
    </h:form>
    Mon souci vient du code du command link g�n�r� par JSF. En gros, il ressemble � �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <a href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.forms['toto'],'...','');}return false">BLABLA</a>
    (pour info, jsfcljs est la fonction Javascript g�n�r�e par le composant <h:commandLink/>)

    Mon souci, c'est que document.forms["toto"] fonctionne initialement, mais d�s que le formulaire est reg�n�r� suite au a4j:commandButton, ce code Javascript ne fonctionne pas sur FF (mais bien sur IE) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    var x = document.forms["toto"];
    var y = document.getElementById("toto");
    alert("1: " + x + "\n2: " + y);
    me retourne :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    1: undefined
    2: [object HTMLFormElement]
    Du coup, sur FF, j'ai une erreur Javascript quand je clique sur le lien, qui ne fonctionne pas du coup.

    Une id�e pour r�soudre le probl�me (sans avoir � changer le reRender du <a4j:commandButton>) ?
    Nous sommes tous semblables, alors acceptons nos diff�rences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  2. #2
    R�dacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par d�faut
    tu as essay� de remplacer h:form par a4j:form?

  3. #3
    R�dacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par d�faut
    Oui, m�me r�sultat avec a4j:form.

    Mon id�e sur le sujet : a4j voit qu'il doit remplacer mon formulaire toto. Il le supprime donc du DOM de ma page lorsque la r�ponse Ajax arrive, puis le rajoute � nouveau (avec le nouveau code HTML).

    A mon avis, lorsque le Javascript rajoute le formulaire toto, le document.forms n'est pas mis � jour par le moteur JS de Firefox. Je le vois avec Firebug, quand je liste le contenu de document.forms � l'initialisation de ma page, j'ai 3 formulaires dedans. Apr�s le rendu Ajax, je me retrouve avec seulement 2.
    Du c�t� d'IE6, document.forms est bien mis � jour apr�s le traitement de la r�ponse Ajax, et donc il contient toujours 3 formulaires...

    Ce n'est pas dramatique, �tant donn� que j'ai modifi� le code JSF pour faire de vrais reRender, mais bon, j'aurais aim� trouv� une solution � ce probl�me quand m�me...
    Nous sommes tous semblables, alors acceptons nos diff�rences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  4. #4
    R�dacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par d�faut
    et en utilisant aussi

    il me semble que a4j:form et a4j:htmlcommandButton corrigent le probl�me de reRender d'un h:commandLink, mais, je pensais que le probl�me existait pour tous les navigateurs, ou peut �tre il s'agit d'un autre probl�me.

  5. #5
    Expert �minent
    Avatar de tchize_
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par d�faut
    la solution la plus simple serait, je pense, de mettre un a4j:outputPanel comme premier �l�ment de ton form. et tu ferais un rerender sur ce outputPanel. Ainsi ton form ne serait pas modifi�.


    Sinon, il y a un test pour �a dans le ACID3 (test 98)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    doc.body.appendChild(doc.createElementNS("http://www.w3.org/1999/xhtml", "form"));
          assertEquals(doc.forms.length, 1, "document.forms not updated after inserting a form");
    Tu peux peut etre le lancer et voir si il passe le test 98. Note que richfaces update peut �tre mal le DOM (form sans namespace) ?

Discussions similaires

  1. R�ponses: 4
    Dernier message: 15/10/2006, 18h05
  2. R�ponses: 8
    Dernier message: 11/10/2006, 17h28
  3. [Probl�me] Avec un javascript pour montrer/cacher un div
    Par draho dans le forum G�n�ral JavaScript
    R�ponses: 24
    Dernier message: 01/10/2006, 17h02
  4. Probl�me avec Socket et/ou Telnet sur le manager d'Asterisk
    Par gorby69 dans le forum Programmation et administration syst�me
    R�ponses: 1
    Dernier message: 21/07/2006, 14h47
  5. [AJAX] Ajax en mode synchrone sur Safari
    Par The Blec dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 17/02/2006, 17h52

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