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 :

jsf javascript dblclick onblur


Sujet :

JSF Java

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut jsf javascript dblclick onblur
    Bonjour à tous,

    tout d'abord, je sais pas si c'est un problème javascript ou pas. les modérateurs pourront en décider et transférer mon topic dans le forum javascript !!

    Je suis actuellement sur un projet de migration VB - Java/J2EE (JSF-Richfaces)
    En vb, lorsqu'on effectue un double clique sur un textbox par exemple, l'evenement onblur ne s'exécute pas alors qu'en HTML en général, lorsqu'on double clique sur une textbox, la méthode onblur est active.

    Pour mieux comprendre voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <html>
    <head>
    <script language="javascript">
    function f_doubleClick() {
    	alert("fonction f_doubleClick()");
     
    }
    </script>
    </head>
        <body>
            <f:view>
                <h:form id="jbForm1">                
                    <h:inputText ondblclick="f_doubleClick()" value="#{richBean.name}">
                        <a4j:support event="onblur" reRender="output"/>
                    </h:inputText>
                </h:form>
                <h:outputText id="output" style="font-weight:bold" value="Typed Name: #{richBean.name}" />
            </f:view>
        </body>
    </html>
    Donc je saisie du texte dans la textbox. Je fais un doubleclic, j'obtiens l'alerte ("fonction f_doubleClick()) de la fonction javascript et le texte saisi apparaît dans le outputtext car il déclenche l'event onblur.

    Ma question est la suivante :

    Peut-on simuler le même comportement en VB qu'en HTML.
    Donc là je me demande :
    • Si on peut le faire avec du javascript en désactivant le onblur lors du doubleclic
    • Si on peut le faire en java ?
    • ou si c'est faisable tout simplement


    En espérant que mon explication est claire ?

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Par défaut
    Question : pourquoi utiliser onblur pour un dblclick ???

    Fais le comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:inputText value="#{richBean.name}">
          <a4j:support event="ondblclick" reRender="output" action="f_doubleClick()"/>
    </h:inputText>
    je n'ai pas testé mais je pense que ça devrait fonctionner...

    En Java, je ne pense pas qu'il y ai un moyen simple de gérer les évènements... peut-être en bindant mais c'est toujours la merde.

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    Question : pourquoi utiliser onblur pour un dblclick ???
    Tout simplement dans l'application en VB, le doublic clic réinitialise le textbox à une valeur par défaut et quand on clic ailleurs (onblur), l'application VB vérifie la validité de la textbox.

    Maintenant pour la migration, en HTML, on souhaite obtenir le meme comportement. Or le double clic sur un textbox déclenche l'evenement onblur.

    J'ai une action différente sur le double clic et le onblur

  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
    tu ne peut pas reproduire tous le comportement vb en HTML,

    maos pour celui là, ça doit être possible , essaye de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:inputText value="#{richBean.name}" id="name">
    <a4j:support event="ondbclick" action=#{bean.action}  focus="name" />
    </h:inputText>

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Par défaut
    Oui mais là ça ne gèrera pas le clic en dehors de l'input... il faut mettre un 2ème a4j:support.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <a4j:outputPanel ajaxRendered="true">
         <h:inputText value="#{richBean.name}" id="name">
               <a4j:support event="ondbclick" action=#{bean.action}  focus="name" />
               <a4j:support event="onblur" ajaxSingle="true" />
         </h:inputText>
         <rich:message for="name" />
    </a4j:outputPanel>
    J'ai rajouté un a4j:outputPanel pour provoquer la réévaluation de l'information et rich:message pour afficher le résultat de l'évaluation.

    Je pense que ça devrait marcher comme ça . A tester tout de même.

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    ok merci, j'essaie ça tout à l'heure et je te tiens au courant

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    ça marche.
    j'ai supprimé certaines choses mais c nikel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:inputText value="#{richBean.name}" id="name">
         <a4j:support event="ondblclick" action="#{richBean.display}" />
         <a4j:support event="onblur" action="#{richBean.lostFocus}" reRender="output" />
      </h:inputText>

    merci en tout cas !!!. Mais les migreurs m'ont détecté un autre pb avec le système d'évenement !! mais je garde espoir

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    ta solution est top ! mais le souci, c'est que dans l'application d'origine de VB.
    Quand on fait un double clic, il y a 2 possibilités : soit ça réinitialise (ajax convient), soit on ouvre une nouvelle fenêtre.

    Or les migreurs me disent qu'ils faut obligatoirement le ondblclick sur le input.

    Donc ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <h:form id="jbForm1"> 
                <h:inputText value="#{richBean.name}" ondblclick="f_doubleClick()" id="name">
              <a4j:support event="onblur" action="#{richBean.lostFocus}" reRender="output" />
         </h:inputText>
         <h:outputText id="output" style="font-weight:bold" value="#{richBean.name}" />
     
    		 </h:form>
    Mais avec cela, le doubleclic déclenche la méthode lostFocus du onblur.
    Donc j'ai pensé à un truc (pas propre peut être) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function f_doubleClick() {
    var obj = document.getElementById("jbForm1:idText");
    var j = obj.onblur;
    obj.onblur =  function (e){return true;};
    alert("fonction f_doubleClick()");
     
    }
    on coupe l'évenement onblur mais le souci vous l'avez bien compris, c'est qu'une fois que c'est coupé, il faut le réactiver et là est le pb !!

    Donc là, je vais continuer à creuser

  9. #9
    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 testé ce que je t'ai proposé?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <a4j:support event="ondbclick" action="#{richBean.dbclickAction}"  focusreRender="output"  focus="inputId" />
    le focus permet de garder le focus sur le l'inputText donc, le onblur ne sera pas exécuté.

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    oui je n'ai pas testé, mais le doubleclick ne doit pas être géré par l'ajax c'est les règles de migrations.

    en fait, c'est bon j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:inputText value="#{richBean.name}" ondblclick="getElementById('jbForm1:bouton').click();" id="name">
     <a4j:support  event="onblur" action="#{richBean.lostFocus}" />
    </h:inputText>
     <h:commandButton id="bouton" action="#{richBean.dblClick}" style="visibility:hidden;"/>
    Je sais c'est moche, mais malheureusement, j'ai pas le choix, ils avaient des règles de migrations.
    En effet, il y a 2 cas d'utilisation du dblclick : initialisation de la valeur du champ ou navigation. Pour répondre de manière uniforme à ces deux cas, il faut utiliser l'évènement javascript onDblClick et une balise commandButton cachée.

    Mais le souci c'est que dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton id="bouton" action="#{richBean.dblClick}" onclick="startwait()" style="visibility:hidden;"/>
    il y a la méthode startwait() qui ouvre une fenêtre modale Richfaces.showModalPanel('msgBox');

    Je peux pas la tester encore. Je vais voir si cette fenêtre fait perdre le focus et fait appel à la méthode onblur().

    car à la place de startwait(), j'ai mis un alert(), et le onblur est déclenché. je vous tiens au courant.

    je sais ça peut paraitre incompréhensible !!, mais c la merde .

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

Discussions similaires

  1. JSF + javascript
    Par amal_noussair dans le forum JSF
    Réponses: 3
    Dernier message: 02/10/2008, 21h18
  2. jsf javascript accent
    Par thetoto52 dans le forum JSF
    Réponses: 2
    Dernier message: 11/04/2008, 11h30
  3. Réponses: 7
    Dernier message: 04/10/2007, 11h31
  4. JSF, javascript et panelGrid
    Par cecile_bzh dans le forum JSF
    Réponses: 2
    Dernier message: 06/09/2007, 15h38
  5. [JSF][Javascript]Contrôle côté client
    Par JohnBlatt dans le forum JSF
    Réponses: 7
    Dernier message: 15/11/2006, 18h21

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