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 :

Attribution de deux actions à un bouton


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Par défaut Attribution de deux actions à un bouton
    J'utilise JSF et j'ai un commandButton, je veux que sa première action est d'exécuter une fonction javaScript et sa deuxième action est d'appeler une fonction de bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action="#{envoi.boutonActionDest}"
    .
    Comment je peux attribuer ces deux actions au meme commandButton?
    Merci d'avance.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="javascript:xxxx"

  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
    Tout simplement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton onclick="monJavascript();" action="#{monBean}"/>
    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
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Tout simplement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton onclick="monJavascript();" action="#{monBean}"/>
    Peut être j'ai mal formulé ma question car avec votre code dans un seul clique on appelle la fonction javaScript et le bean or je veux que dans le premier clique sur le bouton j'appelle la fonction javaScript et dans un deuxième clique sur le meme bouton j'appelle la fonction de mon bean.
    Merci

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    Je vois plusieurs solutions possibles:
    1) mettre en place 2 boutons, dans le managedBean une variable d'état. Lorsqu'on clique sur le premier bouton la variable passe à 1 et dans le second bouton, l'attribut rendered="#{monBean.maVariable == 1}"

    2) travailler avec un backing bean qui va permettre de travailler sur les attributs action et onclick du bouton

    Voilà pour l'info.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Par défaut
    Citation Envoyé par piopium Voir le message
    2) travailler avec un backing bean qui va permettre de travailler sur les attributs action et onclick du bouton

    Voilà pour l'info.
    Je dois utiliser un seul bouton, j'ai pas compris la deuxième solution, pouvez vous m'expliquer un peu plus? Merci

  7. #7
    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
    C'est un peu tordu comme comportement (je trouve) mais ça peut se faire en utilisant un champ caché indiquant le nombre de fois où l'utilisateur a cliqué sur le bouton.
    Lors du 1er clic, on exécute le Javascript, et dans le cas contraire, on exécute l'action du bean.

    Cela se traduit ainsi :


    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
     
    <input type="hidden" id="nbClicBouton" value="0"/>
     
    <h:commandButton action="#{monBean.monAction}" onclick="return testBtn();"/>
     
    <script type="text/javascript">
    function testBtn() {
        var obj = document.getElementById("nbClicBouton");
        if (obj.value == "0") {
            // Premier clic sur le bouton...
            executeMethodeJavascript();
            obj.value = "1";
            // En retournant false, le onclick du commandButton retournera lui-même false, et le bouton n'enverra rien au serveur, et donc l'action au niveau du bean ne sera pas exécutée...
            return false;
        }
        // Le bouton a déjà été cliqué.
        // En retournant true, le onclick du commandButton retournera lui-même true, et le bouton enverra la requête au serveur, et donc l'action au niveau du bean sera exécutée...
        return true;
    }
    </script>
    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

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Par défaut
    Merci pour votre aide mais j'ai encore du problème lorsque je mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById("MyForm:nbClicBouton");
    ça génère une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Multiple annotations found at this line:
    	- Unreachable code
    	- Type mismatch: cannot convert from Element to 
    	 ___obj0
    voilà 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <html>
     
     <f:view >
    <h:form id="MyForm" style="background-color: CornflowerBlue; width: 1254px">
    <h:panelGrid border="0" columns="8" style="width: 365px; height: 100px">
    			<h4><h:outputText value="Nom" style="width: 65px; height: 20px"></h:outputText></h4>
    			<h:inputText id="nomDestinataire"  disabled="true" value="#{envoi.nomDest}" style="width: 151px; height: 30px"></h:inputText>
    			<h4><h:outputText value="Prénom" style="width: 65px; height: 30px"></h:outputText></h4>
    			<h:inputText id="prenomDestinataire" disabled="true" value="#{envoi.prenomDest}" style="width: 151px; height: 30px"></h:inputText>
    			<h4><h:outputText value="Tél" style="width: 65px; height: 30px"></h:outputText></h4>
    			<h:inputText id="telDestinataire" disabled="true" value="#{envoi.telDest}" style="width: 151px; height: 30px"></h:inputText>
    		</h:panelGrid><br>
    <h:panelGrid border="0" columns="3" style="width: 648px;height: 40px;">
    			<input type="hidden" id="nbClicBouton" value="0"/>
     
    			<h:commandButton value="Ajouter destinataire" action="#{envoi.boutonActionDest}" onclick="return testBtn();" style="width: 160px"> </h:commandButton>
     
    		</h:panelGrid>
    </h:form>
     
     </f:view>
    <script type="text/javascript">
        function testBtn() {
        var obj = document.getElementById("MyForm:nbClicBouton");
        if (obj.value == "0") {
            // Premier clic sur le bouton...
            document.getElementById("MyForm:nomDestinataire").disabled = false;   
            document.getElementById("MyForm:prenomDestinataire").disabled = false;  
            document.getElementById("MyForm:telDestinataire").disabled = false;  
            obj.value = "1";
            // En retournant false, le onclick du commandButton retournera lui-même false, et le bouton n'enverra rien au serveur, et donc l'action au niveau du bean ne sera pas exécutée...
            return false;
        }
        // Le bouton a déjà été cliqué.
        // En retournant true, le onclick du commandButton retournera lui-même true, et le bouton enverra la requête au serveur, et donc l'action au niveau du bean sera exécutée...
        return true;
    }
     
    </script>
     
    </html>
    Merci d'avance

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Par défaut
    Merci votre code marche bien et ne me génère plus d'erreur maintenant, le problème étais dans mon projet. Maintenant j'ai rencontré un autre problème c'est que dans le premier clique sur le bouton j'active des champs texte et ça marche bien mais dans le deuxième clique je veux insérer ce que j'écris dans ces champs,dans ma base de données donc je fais appelle à mon bean.Le problème est que dans mon bean ces champs devient 'null'. Je crois que le problème est que dans mon deuxième clique, les champs texte se désactivent une autre fois et je ne sais pas pourquoi or que je veux les garder activés.
    Comment je peux résoudre ce problème?c'est à dire comment je peux garder ces champs activés après le deuxième clique et ne me rends pas la page tel qu'elle était au début?
    Merci

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Par défaut
    Svp aidez moi je me bloque encore.Merci

Discussions similaires

  1. Attribuer deux actions à un bouton
    Par minos23 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 28/04/2009, 03h49
  2. Bouton spécial avec deux icones et deux actions différentes
    Par dk dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 10/10/2007, 15h28
  3. deux actions pour un bouton
    Par allhambra dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/07/2007, 11h34
  4. donner deux action a un bouton
    Par krikete13 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/06/2007, 23h02
  5. [PHP-JS] Deux actions sur un bouton ?
    Par FraK dans le forum Langage
    Réponses: 6
    Dernier message: 01/04/2007, 11h06

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