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 :

Table et bouton (action non detectée)


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut Table et bouton (action non detectée)
    Bonjour,

    je travaille avec JSF 1.2 sous NetBean. J'ai une page dans laquelle j'ai une table (Woodstock Basic). Cette table est bindée sur un tableau et affiche les infos contenues dans ce tableau. Je souhaiterai ajouter un bouton sur lequel je puisse cliquer pour effectuer une action en fonction de la ligne.
    J'ai donc ajouté une colone à ma table et dans TableLayout jai indiqué qu'il s'agissait d'un bouton. J'ai ensuite modifié action dans l'éditeur de propriétés. J'ai mis :
    Mon code de test est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String detailBtn_action(){
    test = "coucou"
    return null;
    }
    Sachant que test est une String déclarée comme attribut de mon bean.
    Lorsque je lance le debug et que je met un point d'arret sur test = "coucou" je ne passe jamais dans ce handler.

    Mon bean est un bean request et le contenu du tableau sur lequel est bindé ma table est initialisé dans la méthode init de mon bean.

    Qu'est ce que j'ai oublié pour que le handler ne se déclenche jamais?

    Merci d'avance

  2. #2
    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
    Juste pour être sûr : ton tableau est bien contenu dans un formulaire (<h:form>) ?
    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

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Oui oui je suis bien dans un form. Mais il s'agit d'un webuijsf:form.

  4. #4
    Membre expérimenté
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Par défaut
    Je pense que l'action doit être MonBeanManage.detailBtn_action(), tu as acces à la source du JSF généré par netbeans?

  5. #5
    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
    Quel est le code JSF de ton bouton au juste ?
    Tu devrais avoir quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton action="#{monBean.detailBtn_action}"/>
    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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Par défaut
    tu dois ajouter un ActionEvent a ta methode :

    public String detailBtn_action(ActionEvent e){
    test = "coucou"
    return null;
    }

  7. #7
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Désolé pour le temps de réponse.

    Pour répondre à romaintaz, le code JSf est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <webuijsf:button actionExpression="#{Viewchain.detailBtn_action}" id="buttonDetails" text="Détails"/>
    J'ai testé ce que Léopardi conseillait mais ça ne fonctionne pas. De toute façon lorsque je double clique sur le bouton dans NetBean le handler qu'il me crée est sans paramètre.

    J'ai lu sur divers forum qu'il fallait peut être que les infos qu'affiche ma table doivent être tout le temps accessibles. Alors que moi les informations sont crées dans la fonction init de ma page. Est ce que vous pensez que ça pourrait être quelque chose dans ce gout là? J'ai essayé de mettre mes données dans un bean de session mais ça fait pareil.

    Voilà le code du fichier jsp :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 
        Document   : Viewchain
        Created on : 16 févr. 2009, 21:48:05
        Author     : 2bo
    -->
    <jsp:root version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:webuijsf="http://www.sun.com/webui/webuijsf">
        <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
        <f:view>
            <webuijsf:page id="page1">
                <webuijsf:html id="html1">
                    <webuijsf:head id="head1">
                        <webuijsf:link id="link1" url="/resources/stylesheet.css"/>
                    </webuijsf:head>
                    <webuijsf:body id="body1" onLoad="window.opener.location.assign('Chains.jsp')" style="-rave-layout: grid">
                        <webuijsf:form id="form1">
                            <webuijsf:label id="label2" style="height: 24px; left: 49px; top: 24px; position: absolute; width: 120px" text="Nom :"/>
                            <webuijsf:label id="label3" style="height: 24px; left: 49px; top: 72px; position: absolute; width: 120px" text="Version :"/>
                            <webuijsf:label id="label4" style="height: 24px; left: 49px; top: 120px; position: absolute; width: 120px" text="Plateforme :"/>
                            <webuijsf:staticText id="staticTextName" style="height: 24px; left: 169px; top: 24px; position: absolute; width: 334px" text="#{Viewchain.currentChain.label}"/>
                            <webuijsf:staticText id="staticTextVersion" style="height: 24px; left: 169px; top: 72px; position: absolute; width: 334px" text="#{Viewchain.currentChain.version}"/>
                            <webuijsf:staticText id="staticTextPlatForm" style="height: 24px; left: 169px; top: 120px; position: absolute; width: 334px" text="#{Viewchain.currentChain.platform}"/>
                            <h:panelGrid id="gridPanel1" style="left: 48px; top: 168px; position: absolute" width="456">
                                <webuijsf:label id="label1" text="Description"/>
                                <webuijsf:staticText id="staticText4" text="#{Viewchain.currentChain.description}"/>
                                <webuijsf:table augmentTitle="false" id="table3" title="Services" width="431">
                                    <webuijsf:tableRowGroup id="tableRowGroup2" rows="10" sourceData="#{Viewchain.serviceIn}" sourceVar="currentRow">
                                        <webuijsf:tableColumn headerText="Nom" id="tableColumn4" sort="label">
                                            <webuijsf:staticText id="staticText5" text="#{currentRow.value['label']}"/>
                                        </webuijsf:tableColumn>
                                        <webuijsf:tableColumn headerText="Version" id="tableColumn5" sort="version">
                                            <webuijsf:staticText id="staticText6" text="#{currentRow.value['version']}"/>
                                        </webuijsf:tableColumn>
                                        <webuijsf:tableColumn headerText="Détails" id="tableColumn1" width="200">
                                            <webuijsf:button actionExpression="#{Viewchain.detailBtn_action}" id="buttonDetails" text="Détails"/>
                                        </webuijsf:tableColumn>
                                    </webuijsf:tableRowGroup>
                                </webuijsf:table>
                                <webuijsf:table augmentTitle="false" id="table4" title="Sous chaines" width="431">
                                    <webuijsf:tableRowGroup id="tableRowGroup4" rows="5" sourceData="#{Viewchain.chainIn}" sourceVar="currentRow">
                                        <webuijsf:tableColumn headerText="Nom" id="tableColumn2" sort="label">
                                            <webuijsf:staticText id="staticText2" text="#{currentRow.value['label']}"/>
                                        </webuijsf:tableColumn>
                                    </webuijsf:tableRowGroup>
                                </webuijsf:table>
                            </h:panelGrid>
                            <br/>
                        </webuijsf:form>
                    </webuijsf:body>
                </webuijsf:html>
            </webuijsf:page>
        </f:view>
    </jsp:root>
    Si vous avez d'autres idées je suis preneur.

  8. #8
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Je viens de refaire un test avec le bean de session et cette fois ci celà semble fonctionner. Si les données de la table sont dans le bean de session je passe bien par mon handler. Quelqu'un saurait il m'expliquer pourquoi? Et comment contourner le problème? Car je suis dans une pop up je ne peux donc pas stocker mes données dans un bean de session.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    D'après moi le bean en scope request n'existe que lors de la requête. Donc une fois la requête terminée, lorsque tu cliques sur le bouton, le bean n'existe plus.
    A confirmer cependant.

    Les beans en scope request sont à utiliser dans des cas très précis selon moi, et jusqu'ici je n'ai eu à m'en servir qu'une seule fois. Même dans le cas d'utilisation de popup, si tu as offres des actions dans ta popup et que tu as des infos à conserver, tu dois passer par un bean de scope session.

    M'enfin, tout ça reste très théorique et vague.

  10. #10
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    J'ai résolu mon problème, il fallait que je recharge le contenu de mon objet qui sert à remplir la table dans le preprocess. De plus il faut passer les boutons en immediate pour que le preprocess soit appelé à chaque fois que l'on clique sur un bouton.
    Donc au final il faut bien recharger l'objet conteneur dans le meme état lors du clique sur le bouton si l'on veut que le handler soit appelé.

    sir_gcc les beans request dans le cas de pop up qui effectuent des enregistrement je ne vois pas comment stocker les infos dans un bean session sans que tous les pop up ecrasent mutuellement leurs données.

    Merci à tous.

  11. #11
    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
    Citation Envoyé par Leopardi Voir le message
    tu dois ajouter un ActionEvent a ta methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String detailBtn_action(ActionEvent e){
    test = "coucou"
    return null;
    }
    Non !

    Tu as 2 façons de définir des actions en JSF, en utilisant l'attribut action ou actionListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h:commandButton action="#{monBean.action1}" .../>
    <h:commandButton actionListener="#{monBean.action1}" .../>
    Dans le bean, action1 et action2 n'ont pas les mêmes signatures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public String action1() {
        ...
        return "xxx";
    }
     
    public void action2(ActionEvent evt) {
        ...
    }
    Dans l'exemple que tu donnes, tu mélanges les 2 cas !

    Debault, puisque ton sujet a été résolu, pense à la prochaine fois
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2011, 09h57
  2. [hardware] disque dur non detecté
    Par nounou dans le forum Composants
    Réponses: 7
    Dernier message: 09/05/2005, 23h44
  3. [FLASH MX2004] Création d'un bouton Action Script
    Par chocobos dans le forum Flash
    Réponses: 12
    Dernier message: 13/04/2005, 12h03
  4. Disques durs non detectés
    Par gibet_b dans le forum Matériel
    Réponses: 6
    Dernier message: 20/09/2004, 19h29
  5. [Struts][Débutant]Servlet Action non dispo ?
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 7
    Dernier message: 09/04/2004, 08h06

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