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 :

CommandButton dans un dataTable


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut CommandButton dans un dataTable
    Hello,

    Comme décrit dans la FAQ j'aimerai réagir au clique d'un commandButton disposé sur une ligne d'un dataTable. Voici le 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
     
    <rich:panel>
                <f:facet name="header">tte</f:facet>
                <h:dataTable value="#{tte.dataModel}" var="aCall">
    	            <h:column>
    					<f:facet name="header">Line id</f:facet>
    					#{aCall.lineLink}
    				</h:column>
    	            <h:column>
    					<f:facet name="header">Date</f:facet>
    					#{aCall.date}
    				</h:column>		
    				<h:column>
    					<f:facet name="header">Appelant</f:facet>
    					#{aCall.alias}
    				</h:column>
    				<h:column>
    					<f:facet name="header">Type d'appel</f:facet>
    					#{aCall.callType}
    				</h:column>		
    				<h:column>
    					<f:facet name="header">Action</f:facet>
    					<h:commandButton id="doDel" action="#{tte.delete}" value="delete"></h:commandButton>
    				</h:column>	
                </h:dataTable>
    J'aimerai juste pourvoir appeler la méthode delete de mon bean.

    J'ai essayé plusieurs solutions sans grand succès.

    en espérant votre aide !

    Bonne soirée

    Joel

  2. #2
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    Et qu'est ce qu'il se passe? la méthode n'est pas appelée?

  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 : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Le code JSF me parait correct.
    Ta datatable se trouve bien 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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    Merci de votre rapidité !

    En effet la méthode n'est pas appelée !

    Lorsque j'ajoute exactement le même bouton au fond de la forme (donc pas dant la datatable) la méthode est bel et bien appelée...

    voici le code de la form

    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
    <h:form id="tteForm">
     
            <rich:panel>
                <f:facet name="header">tte</f:facet>
                <h:dataTable value="#{tte.dataModel}" var="aCall">
    	            <h:column>
    					<f:facet name="header">Line id</f:facet>
    					#{aCall.lineLink}
    				</h:column>
    	            <h:column>
    					<f:facet name="header">Date</f:facet>
    					#{aCall.date}
    				</h:column>		
    				<h:column>
    					<f:facet name="header">Appelant</f:facet>
    					#{aCall.alias}
    				</h:column>
    				<h:column>
    					<f:facet name="header">Type d'appel</f:facet>
    					#{aCall.callType}
    				</h:column>		
    				<h:column>
    					<f:facet name="header">Action</f:facet>
    					<h:commandButton id="doDel" action="#{tte.delete}" value="delete" immediate="true"></h:commandButton>
    				</h:column>	
                </h:dataTable>
                <h:commandButton id="doDel1" action="#{tte.delete}" value="delete" immediate="true"></h:commandButton>
                <h:commandButton action="#{tte.tte}" value="get Calls"></h:commandButton>
            </rich:panel>
        </h:form>

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    C'est bizarre, j'ai le même code, mais ça fonctionne...
    à la différence que mon bouton est en <a4j:...>
    et que je n'ai pas définit immediate=true.

    Je viens d'essayer avec un bouton en <h:..> sans immediate=true, ça marche.
    le même avec immediate=true, marche pas...

    après ça vaut ce que ça vaut, tu peux toujours essayer ;-)

    edit: mince, je n'avais pas vu que dans ta premiere version tu n'avais pas de immediate... apparement tu as mis richfaces, donc tu peux toujours essayer de mettre un bouton a4j...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    ... même résultat avec sans immediat="qqch"

    Peut-être c'est au niveau du bean que ça joue pas ? il faut le mettre en Statfull statless ?

    Parce que lorsque je clique sur un bouton la page se rafraîchit automatiquement...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    .... merci quand même !

    Quelqu'un d'autre a une idée ?

  8. #8
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    J'ai une idée, montres moi ton getter du code qui charge :
    #{tte.dataModel}

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private DataModel dataModel = new ListDataModel() ;
    //......
    public void delete ()
    	{
    		System.out.println("444444444444") ;
    	}
     
    	public DataModel getDataModel() {
    		return dataModel;
    	}
    Voila

  10. #10
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Mais... ton datamodele est recréé à chaque appel de la page ...

    essayes :
    soit d'ajouter un t:savestate sur tte.dataModel et modifier ton getdatamodele par :

    public DataModel getDataModel() {
    if ( dataModel == null)
    {
    fonctionpourchargerDM();
    }
    else
    {
    return dataModel;
    }
    }

    Soit d'enlever la balise value de ton datatable, d'ajouter une balise databinding, de créer un bouton a coté qui appelera dans ton back bean :
    mondatatable.setValue(tondatamodele);

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    Voila les choses s'améliorent :-)

    mon xhtml :
    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
     
    <rich:panel>
                <f:facet name="header">tte</f:facet>
                <h:dataTable value="#{tte.dataModel}" var="aCall">
    	            <h:column>
    					<f:facet name="header">Line id</f:facet>
    					#{aCall.lineLink}
    				</h:column>
    	            <h:column>
    					<f:facet name="header">Date</f:facet>
    					#{aCall.date}
    				</h:column>		
    				<h:column>
    					<f:facet name="header">Durée</f:facet>
    					#{aCall.duration}
    				</h:column>
    				<h:column>
    					<f:facet name="header">Type d'appel</f:facet>
    					#{aCall.callType}
    				</h:column>		
    				<h:column>
    					<f:facet name="header">Action</f:facet>
    					<h:commandButton id="doDel" action="#{tte.delete}" value="delete"></h:commandButton>
    				</h:column>	
                </h:dataTable>
    et au niveau du bean :

    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
     
    public void tte()
    {
    	try 
    	{
     
    		List<Call> lst = getINfos()
     
    		dataModel.setWrappedData(lst) ;
     
    		manager.disconnect(session) ;
    	}
    	catch (Exception e){System.err.println("Erreur : " + e.getMessage()) ;}
    	}
     
    	public void delete ()
    	{
    		System.out.println("444444444444") ;
    	}
     
    	public DataModel getDataModel() 
    	{
    		if (dataModel == null)
    		{
    			dataModel = new ListDataModel() ;
    			tte() ;
    		}
     
    		return dataModel ;
    	}
    Quand j'appel la page, la méthode getDataModel est appelée et la page se "remplit" automatiquement. Quand je clique sur le bouton delete d'un record, la page est rechargée et la méthode delete est invoquée... ça serait mieux de faire le contraire non ?

    Merci en tout cas

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    okay merci encore !

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

Discussions similaires

  1. CommandButton ne fonctionnant pas dans un datatable
    Par FranckyLeSage dans le forum JSF
    Réponses: 1
    Dernier message: 28/08/2014, 20h24
  2. Réponses: 3
    Dernier message: 19/07/2006, 14h28
  3. [C#] Modifier une valeur dans une DataTable
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/05/2005, 10h45
  4. [VB.NET] Suppression de ligne dans un DataTable
    Par seemax dans le forum Windows Forms
    Réponses: 7
    Dernier message: 06/05/2004, 14h19
  5. Réponses: 2
    Dernier message: 20/02/2004, 08h47

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