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 :

Générer pie statistique à partir de DataTable


Sujet :

JSF Java

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut Générer pie statistique à partir de DataTable
    bonjour,
    je dispose d'une datatable qui affiche les valeurs d'une arraylist de la façon suivante:
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
      <h:form id="form" style="red">  
                <p:growl id="growl1" showDetail="true" sticky="true" />
                <p:panel id="test" style="background: whitesmoke ">
                    <p:dataTable value="#{eleve.valide}" var="o" paginator="true" rows="10" id="test1" styleClass="myTable" scrollable="true" 
                                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                 rowsPerPageTemplate="10" widgetVar="50"   resizableColumns="true"  ><!--style="width: auto;"-->
                        <f:facet name="header"  >  
                             Liste des eleves   
                        </f:facet>
     
                        <p:column filterBy="#{o.header}" width="80px">
                            <f:facet name="header">  
                                <h:outputText value="En tete" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.header}"/>
                        </p:column>
                        <p:column sortBy="#{o.texte}" width="360px" >
                            <f:facet name="header">  
                                <h:outputText value="Message " style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.texte}"/>
                        </p:column>
     
                        <p:column sortBy="#{o.date}" width="300px">
                            <f:facet name="header">  
                                <h:outputText value="Date" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.date}"/>
                        </p:column>
     
                        <p:column sortBy="#{o.status}" width="100px" >
                            <f:facet name="header">  
                                <h:outputText value="Status" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.status}"/> 
                        </p:column>
     
                        <p:column sortBy="#{o.solde}" width="40px">
                            <f:facet name="header">  
                                <h:outputText value="Nombre" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.solde}"/>
                        </p:column>
     
                        <p:growl id="growl" showDetail="true" sticky="true" /> 
                        <p:column  width="100px" id="test3">
                            <f:facet name="header">  
                                <h:outputText value="Statistiques" style="color: #ffffff" />  
                            </f:facet>
                            <p:commandButton value="generer" actionListener="#{eleve.statistiques(o)}" update=":form:growl1"  icon="ui-icon-check" style="background:  green !important; color: white" />
     
     
     
                        </p:column>
     
     
     
                    </p:dataTable>
                </p:panel>
     
     
            </h:form>
    et voiçi la methode statistique qui calcule les valeur à partir d'une base de donnée.
    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
     
    public void statistiques(EleveBean eleve) {
            int nbreTotal = 0;
            int nbreTransmis = 0;
            int nbreNonTransmis = 0;
     
            selectedCompagne = eleve;
            String relatedTable = selectedCompagne.getRelatedtable();
     
            Connection conn = com.util.ConnectionPool.getGatewayConnection();
            nbreTotal = Commons.compterNbre(relatedTable, conn);
            nbreTransmis = Commons.compterNbreDelivred(relatedTable, conn);
            nbreNonTransmis = Commons.compterNbreUnDelivred(relatedTable, conn);
     
     
            pieModel = new PieChartModel();
            pieModel.set("Delivred", nbreTransmis);
            pieModel.set("UnDelivred", nbreNonTransmis);
            pieModel.set("En attente", nbreTotal - (nbreTransmis + nbreNonTransmis));
     
     
            try {
                conn.close();
            } catch (SQLException ex) {
                Logger.getLogger(EleveBeanBean.class.getName()).log(Level.SEVERE, null, ex);
            } 
     
        }
    la methode calcule bien les differents nombres mais je n'ai pas réussi à afficher le pie dans ma page.
    J'aimerai si c'est possible, lorsque je clique sur le bouton "generer" devant chaque eleve, afficher un popup (ou meme dans la meme page en dessous du datatable ) qui affiche le pieModel qui contient le résultat de ma methode déjà postée.

    merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Bonjour, il y a peut être chose qui m'échappe mais je ne vois pas le composant <p:chart/> dans le formulaire, est-ce normal ?
    Il faudrait le mettre sous le tableau ou à la limite dans un <p:dialog/> (pour simuler une popup) et updater ce composant <p:chart/> lors du clique sur le bouton "générer".

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Il te manque l'affichage de la boite de dialogue, dans la qu'elle tu dois déclarer ton composant de statistique, et faire appel à cette boite depuis ton bouton déclarer dans ton tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <p:column  headerText="Détails" style="width:32px;text-align: center">
                 			<p:commandButton update=":form:carDetail" oncomplete="PF('carDialog').show()" icon="ui-icon-search" title="View" styleClass="bouttonView">
                    			<f:setPropertyActionListener value="#{cat}" target="#{date=.selected}" />
               			    </p:commandButton>
            			</p:column>
    				</p:dataTable>
     
    				<p:dialog header="Informations sur le lot" widgetVar="carDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
            <p:outputPanel id="carDetail" style="text-align:center;">
                 <p:chart type="pie" model="#{statistiqueBean.pieModel}" />
            </p:outputPanel>
        </p:dialog>

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    bonjour
    merci pour votre réponse. j'ai essayé d'appliquer votre exemple mais ça n'a pas marché pour moi.
    j'ai du oublié quelques chose.je vous poste 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:p="http://primefaces.org/ui">
     
        <h:head>
            <title> Liste des eleves </title>
            <link rel="stylesheet" href="css/style_all2.css" type="text/css" media="screen" />
     
    <style>
    .ui-datatable.myTable th {
        background: #1E90FF;
    }
    </style>
            <!-- to choose another color scheme uncomment one of the foloowing stylesheets and wrap styl1.css into a comment -->
            <link rel="stylesheet" href="css/style1hay.css" type="text/css" media="screen" />
            <link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="screen" />
            <link rel="stylesheet" href="css/jquery.wysiwyg.css" type="text/css" media="screen" /> 
     
        </h:head>
        <h:body>
            <!-- style="width: auto;" -->
            <h:form>
     
            </h:form>
            <h:form id="form" style="red">  
                <p:growl id="growl1" showDetail="true" sticky="true" />
                <p:panel id="test" style="background: whitesmoke ">
                    <p:dataTable value="#{eleve.valide}" var="o" paginator="true" rows="10" id="test1" styleClass="myTable" scrollable="true" 
                                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                 rowsPerPageTemplate="10" widgetVar="50"   resizableColumns="true"  ><!--style="width: auto;"-->
                        <f:facet name="header"  >  
                             Liste des eleves   
                        </f:facet>
     
                        <p:column filterBy="#{o.header}" width="80px">
                            <f:facet name="header">  
                                <h:outputText value="En tete" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.header}"/>
                        </p:column>
                        <p:column sortBy="#{o.texte}" width="360px" >
                            <f:facet name="header">  
                                <h:outputText value="Message " style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.texte}"/>
                        </p:column>
     
                        <p:column sortBy="#{o.date}" width="300px">
                            <f:facet name="header">  
                                <h:outputText value="Date " style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.date}"/>
                        </p:column>
     
                        <p:column sortBy="#{o.status}" width="100px" >
                            <f:facet name="header">  
                                <h:outputText value="Status" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.status}"/> 
                        </p:column>
     
                        <p:column sortBy="#{o.solde}" width="40px">
                            <f:facet name="header">  
                                <h:outputText value="Nombre" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.solde}"/>
                        </p:column>
     
                        <p:growl id="growl" showDetail="true" sticky="true" /> 
                        <p:column  width="100px" id="test2">
                            <f:facet name="header">  
                                <h:outputText value="valider" style="color: #ffffff" />  
                            </f:facet>
                            <p:commandButton update=":form:stat" oncomplete="PF('carDialog').show()" icon="ui-icon-search" title="View" styleClass="bouttonView">
                    			<f:setPropertyActionListener value="#{eleve}" target="#{eleve.valide}" />
               			    </p:commandButton>
     
     
                        </p:column>
     
     
     
                    </p:dataTable>
     
                    <p:dialog header="Informations sur le lot" widgetVar="carDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
            <p:outputPanel id="stat" style="text-align:center;">
                 <p:chart type="pie" model="#{eleve.statistiques(o)}" />
            </p:outputPanel>
        </p:dialog>
     
                </p:panel>
     
     
            </h:form>
     
        </h:body>
    </html>
    j'ai eu l'erreur suivante:
    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
    An Error Occurred:
     
    java.lang.NullPointerException
    - Stack Trace
     
    java.lang.NullPointerException
    	at beans.EleveBean.statistiques(CompagneBean.java:450)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:601)
    	at javax.el.BeanELResolver.invoke(BeanELResolver.java:183)
    	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:161)
    	at org.apache.el.parser.AstValue.getValue(AstValue.java:173)
    	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    	at org.primefaces.component.chart.Chart.getModel(Chart.java:100)
    	at org.primefaces.component.chart.renderer.PieRenderer.encodeData(PieRenderer.java:30)
    merci de m'aider

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Je ne sais pas ce que tu veux dire par ça n'a pas marché !! mais je trouve que c'est normal que ça ne marche pas dans ton cas car tu es entrain de passer en paramètre une variable "o" de ta datatable dans ta boite de dialogue que cette dernière ne la reconnais pas !!
    Je te conseil donc de passer la ligne sélectionné dans ton Bean.
    Si ça marche pas encore tu peux nous décrire plus le problème et qu'elle version de primefaces et de jsf tu utilise.

  6. #6
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    L'attribut "model" du <p:chart/> doit correspondre au getter du PieChartModel de ton controller Eleve.
    S'il n'est pas présent dans ton code il te faudrait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public PieChartModel getPieModel() {
      return pieModel;
    }
    Et dans ton xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:chart type="pie" model="#{eleve.pieModel}" />

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Maine13 Voir le message
    Bonjour,

    Je ne sais pas ce que tu veux dire par ça n'a pas marché !! mais je trouve que c'est normal que ça ne marche pas dans ton cas car tu es entrain de passer en paramètre une variable "o" de ta datatable dans ta boite de dialogue que cette dernière ne la reconnais pas !!
    Je te conseil donc de passer la ligne sélectionné dans ton Bean.
    Si ça marche pas encore tu peux nous décrire plus le problème et qu'elle version de primefaces et de jsf tu utilise.
    bonjour et merci pour votre réponse,
    effectivement je passe l'objet selectionné depuis cet objet "o".
    j'utilise jsf 2.0 et primefaces 5.0.je vous poste mon code afin de m'éclairer.
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:p="http://primefaces.org/ui">
     
        <h:head>
            <title> Liste des eleves </title>
            <link rel="stylesheet" href="css/style_all2.css" type="text/css" media="screen" />
     
    <style>
    .ui-datatable.myTable th {
        background: #1E90FF;
    }
    </style>
            <!-- to choose another color scheme uncomment one of the foloowing stylesheets and wrap styl1.css into a comment -->
            <link rel="stylesheet" href="css/style1hay.css" type="text/css" media="screen" />
            <link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="screen" />
            <link rel="stylesheet" href="css/jquery.wysiwyg.css" type="text/css" media="screen" /> 
     
        </h:head>
        <h:body>
            <!-- style="width: auto;" -->
            <h:form>
     
            </h:form>
            <h:form id="form" style="red">  
                <p:growl id="growl1" showDetail="true" sticky="true" />
                <p:panel id="test" style="background: whitesmoke ">
                    <p:dataTable value="#{eleve.valide}" var="o" paginator="true" rows="10" id="test1" styleClass="myTable" scrollable="true" 
                                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                 rowsPerPageTemplate="10" widgetVar="50"   resizableColumns="true"  ><!--style="width: auto;"-->
                        <f:facet name="header"  >  
                             Liste des eleves   
                        </f:facet>
     
                        <p:column filterBy="#{o.header}" width="80px">
                            <f:facet name="header">  
                                <h:outputText value="En tete" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.header}"/>
                        </p:column>
                        <p:column sortBy="#{o.texte}" width="360px" >
                            <f:facet name="header">  
                                <h:outputText value="Message " style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.texte}"/>
                        </p:column>
     
                        <p:column sortBy="#{o.date}" width="300px">
                            <f:facet name="header">  
                                <h:outputText value="Date " style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.date}"/>
                        </p:column>
     
                        <p:column sortBy="#{o.status}" width="100px" >
                            <f:facet name="header">  
                                <h:outputText value="Status" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.status}"/> 
                        </p:column>
     
                        <p:column sortBy="#{o.solde}" width="40px">
                            <f:facet name="header">  
                                <h:outputText value="Nombre" style="color: #ffffff" />  
                            </f:facet>
                            <h:outputText value="#{o.solde}"/>
                        </p:column>
     
                        <p:growl id="growl" showDetail="true" sticky="true" /> 
                        <p:column  width="100px" id="test2">
                            <f:facet name="header">  
                                <h:outputText value="valider" style="color: #ffffff" />  
                            </f:facet>
                            <p:commandButton update=":form:stat" oncomplete="PF('carDialog').show()" icon="ui-icon-search" title="View" styleClass="bouttonView">
                    			<f:setPropertyActionListener value="#{eleve}" target="#{eleve.valide}" />
               			    </p:commandButton>
     
     
                        </p:column>
     
     
     
                    </p:dataTable>
     
                    <p:dialog header="Informations sur le lot" widgetVar="carDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
            <p:outputPanel id="stat" style="text-align:center;">
                 <p:chart type="pie" model="#{eleve.statistiques(o)}" />
            </p:outputPanel>
        </p:dialog>
     
                </p:panel>
     
     
            </h:form>
     
        </h:body>
    </html>
    voiçi mon 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
     
     
    package beans;
     
     
     
    import com.util.Commons;
    import dao.UserDAO2;
    import java.io.IOException;
    import java.io.Serializable;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.faces.application.FacesMessage;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import javax.faces.bean.SessionScoped;
    import javax.faces.context.ExternalContext;
    import javax.faces.context.FacesContext;
    import javax.faces.model.DataModel;
    import javax.faces.model.ListDataModel;
     
    import javax.servlet.http.HttpSession;
    import org.primefaces.model.chart.PieChartModel;
     
    /**
     *
     * @author stoner2008
     */
    @ManagedBean(name = "eleve")
    @RequestScoped
    public class EleveBean implements Serializable {
     
     private DataModel dataModel = new ListDataModel();
     
        private PieChartModel pieModel;
        ...
        private EleveBean selectedCompagne;
     
     
        public PieChartModel getPieModel() {
    /*j'ai ajouté la condition suivante parce que sans laquelle j'aurais une erreur null pointerException mais de cette façon je ne peux accéder qu'au statistique du dernier élément.
    je dois supprimer cette instruction mais je ne sais pas comment corriger l'erreur du selectedCompagne==null
    /*
     
           if (selectedCompagne==null)
           {
               System.out.println("size --> "+UserDAO2.getCompagne2().size());
               selectedCompagne=UserDAO2.getCompagne2().get(UserDAO2.getCompagne2().size()-1);
               
           }
                statistiques(selectedCompagne);
            
               return pieModel;  
           
        }
     
       
     
     
        /*
         * **** Getters & Setters     */
        public  boolean isSupp() {
            return supp;
        }
     
        public  void setSupp(boolean supp) {
            this.supp = supp;
        }
     
     
     
        public EleveBean getSelectedCompagne() {
            return selectedCompagne;
        }
     
        public void setSelectedCompagne(EleveBean selectedCompagne) {
            this.selectedCompagne = selectedCompagne;
        }
     
     
        public void setHeader(String header) {
            this.header = header;
        }
     
        public String getUser() {
            return user;
        }
     
        public void setUser(String user) {
            this.user = user;
        }
     
        public String getStatus() {
            return status;
        }
     
        public void setStatus(String status) {
            this.status = status;
        }
     
        public int getSolde() {
            return solde;
        }
     
        public void setSolde(int solde) {
            this.solde = solde;
        }
     
        public String getRec_date() {
            return rec_date;
        }
     
        public void setRec_date(String rec_date) {
            this.rec_date = rec_date;
        }
     
        public String getTexte_sms() {
            return texte_sms;
        }
     
        public void setTexte_sms(String texte_sms) {
            this.texte_sms = texte_sms;
        }
     
     
        public ArrayList<EleveBean> getvalide() throws ParseException {
     
            return UserDAO2.getCompagne2();
        }
     
        /*
         * générer statistiques
         */
     
        public void statistiques(EleveBean eleve) {
            int nbreTotal ;
            int nbreTransmis ;
            int nbreNonTransmis ;
     
            selectedCompagne = eleve;
            if (selectedCompagne !=null)
            { String relatedTable = selectedCompagne.getRelatedtable();
            System.out.println("la table qui correspond à la eleve est " + relatedTable);
            Connection conn = com.util.ConnectionPool.getGatewayConnection();
            nbreTotal = Commons.compterNbre(relatedTable, conn);
            nbreTransmis = Commons.compterNbreDelivred(relatedTable, conn);
            nbreNonTransmis = Commons.compterNbreUnDelivred(relatedTable, conn);
     
            System.out.println("nbre total " + nbreTotal);
            System.out.println("nbre transmis " + nbreTransmis);
            System.out.println("nbre non delivré " + nbreNonTransmis);
            int a = nbreTotal - (nbreTransmis + nbreNonTransmis);
            System.out.println("nbre non transmis " + a);
     
            pieModel = new PieChartModel();
            pieModel.set("Delivred", nbreTransmis);
            pieModel.set("UnDelivred", nbreNonTransmis);
            pieModel.set("En attente", nbreTotal - (nbreTransmis + nbreNonTransmis));
            pieModel.setTitle("statistiques de la campagne SMS");
     
     
     
            try {
                conn.close();
            } catch (SQLException ex) {
                Logger.getLogger(EleveBean.class.getName()).log(Level.SEVERE, null, ex);
            } 
             }
     
        }
    }
    j'ai ajouté la condition dans le getPieModel parce que sans laquelle j'aurais une erreur null pointerException mais de cette façon je ne peux accéder qu'au statistique du dernier élément.
    je dois supprimer cette instruction mais je ne sais pas comment corriger l'erreur du selectedCompagne==null
    merci

  8. #8
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Le getter de pieModel ne devrait rien faire d'autre que renvoyer le pieModel.
    Par contre il faudrait l'instancier dans un init afin de ne pas avoir d'erreur lors du premier affichage de la page.

    Ensuite c'est dans l'action du bouton que tu devrais appeler la méthode statistiques(selectedCompagne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:command action="#{eleve.statistiques(o)}" update="@form:stat" oncomplete="PF('carDialog').show()" icon="ui-icon-search" styleClass="bouttonView"/>
    Cette action va mettre à jour ton pieModel puisque c'est une variable de ton bean.
    Enfin, grâce au update de ton bouton, tu vas demander à la vue de faire un getPieModel, or celui-ci aura bien été rempli avec l'action précédente.

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    j'ai ajouté une methode init dans mon bean pour instancier le piModel comme ceci
    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
     public PieChartModel getPieModel() {
               return pieModel;  
        }
     
     
     @PostConstruct
        public void init() {
            pieModel = new PieChartModel();
        }
    ...
    ....
     public void statistiques(EleveBean eleve) {
            int nbreTotal ;
            int nbreTransmis ;
            int nbreNonTransmis ;
     
            selectedCompagne = eleve;
     
     
            System.out.println("nbre total " + nbreTotal);
            System.out.println("nbre transmis " + nbreTransmis);
            System.out.println("nbre non delivré " + nbreNonTransmis);
            int a = nbreTotal - (nbreTransmis + nbreNonTransmis);
            System.out.println("nbre non transmis " + a);
     
     
            pieModel.set("Delivred", nbreTransmis);
            pieModel.set("UnDelivred", nbreNonTransmis);
            pieModel.set("En attente", nbreTotal - (nbreTransmis + nbreNonTransmis));
            pieModel.setTitle("statistiques de la campagne SMS");
     
     
     
            try {
                conn.close();
            } catch (SQLException ex) {
                Logger.getLogger(CompagneBean.class.getName()).log(Level.SEVERE, null, ex);
            }
    ceci est mon appel via le bouton commandButton et le PieModel à afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     <p:commandButton action="#{eleve.statistiques(o)}" update="@form:stat" oncomplete="PF('carDialog').show()" icon="ui-icon-image" title="View" styleClass="bouttonView" />
    </p:dataTable>
     <p:dialog header="Informations sur le lot" widgetVar="carDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
            <p:outputPanel id="stat" style="text-align:center;">
                <center>  <p:pieChart id="sample"
                        value="#{eleve.pieModel}"
                        legendPosition="w"
                        seriesColors="6CBB3C,FF0000,FFFF00" 
                        style="width:350px;height:300px"
                        title="Statistique de #{loginBean.uname}"/></center>
     
            </p:outputPanel>
        </p:dialog>
    l'execution de la methode se fait, j'ai des logs qui s'affichent pourtant le pieModel n'est jamais affiché et je n'ai pas des erreurs dans mes logs.

  10. #10
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Essaie peut être dans un premier temps de mettre dans ton pieModel des valeurs en dur durant le init, histoire de voir s'il ne manque rien concernant le composant pieChart et le sortir du dialog pour l'afficher sous le tableau.

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    j'ai passé des valeurs en dur dans init() et ça a marché.
    merci bien pour votre aide .
    je passe la discussion en Résolue

  12. #12
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    OK j'espère que cela à surtout permis de répondre au problème initial

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

Discussions similaires

  1. Générer des statistiques à partir de tables MySQL
    Par sirina88 dans le forum Langage
    Réponses: 12
    Dernier message: 12/08/2011, 10h40
  2. [POI / Jexcel] Générer statistiques à partir .xls
    Par Jiraiya42 dans le forum Documents
    Réponses: 0
    Dernier message: 26/11/2009, 11h03
  3. Réponses: 2
    Dernier message: 22/11/2007, 09h27
  4. Réponses: 1
    Dernier message: 14/10/2005, 09h55
  5. [ImageMagick] Générer une image à partir de plusieurs images ?
    Par fichtre! dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 16/02/2005, 15h32

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