Bonjour tout le monde.
Sa fait déjà quatre jour que je scrute le net à ce propos mais je ne trouve rien.
en fait j'ai cette page jsf contenant un datatable:

EtudiantAffiche.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
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
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.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>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
 
                <title>Liste des étudiants</title>
            </f:facet>
        </h:head>
 
        <h:body>
 
 
                    <f:event type="javax.faces.event.PreRenderViewEvent" listener="#{etudiantMbean.preRenderView()}"/>
                    <f:view>
                        <h:form>
                            <h1><h:outputText value="List"/></h1>
                            <p:dataTable value="#{etudiantMbean.allEtudiant}" 
                                         var="item"
                                         paginator="true"
                                         rows="5"
                                         widgetVar="etudiantTable"
                                         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                         rowsPerPageTemplate="5,10,15"
                                         emptyMessage="Aucun étudiant trouvé">
 
 
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Nom"/>
                                    </f:facet>
                                    <h:outputText value="#{item.nom}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Prenom"/>
                                    </f:facet>
                                    <h:outputText value="#{item.prenom}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Numéro de fiche"/>
                                    </f:facet>
                                    <h:outputText value="#{item.numFiche}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Montant à payer"/>
                                    </f:facet>
                                    <h:outputText value="#{item.montantAttrib}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Date Probable d'examen"/>
                                    </f:facet>
                                    <h:outputText value="#{item.sessionexamidSessionExam}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Formation"/>
                                    </f:facet>
                                    <h:outputText value="#{item.formationidFormation}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Agence"/>
                                    </f:facet>
                                    <h:outputText value="#{item.agenceidAgence}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Afficher"/>
                                    </f:facet>
                                    <h:commandButton value="Afficher" action="#{etudiantMbean.showDetailsEtudiant(item)}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Modifier"/>
                                    </f:facet>
                                    <h:commandButton value="Modifier" action="#{etudiantMbean.showDetails(item)}"/>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Supprimer"/>
                                    </f:facet>
                                    <h:commandButton value="Supprimer" action="#{etudiantMbean.delete(item)}"/>
                                </p:column>
                            </p:dataTable>
                        </h:form>
                    </f:view>
 
                </h:body>
 
</html>
j'utilise ce managed bean pour traiter avec la jsf EtudiantAffiche et j'y utilise la méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
showDetails(Etudiant etud)
pour récuperer un étudiant et transmettre à la page EtudiantDetails.xhtml:

Voici la méthode showDetails:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public String showDetails(Etudiant etud){
        this.etudiant = etud;
        return "EtudiantDetails";
    }

Le code source de la page EtudiantDetails.xhtml est le suivant:
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
 
<f:view>
                        <h:form>
                            <h1><h:outputText value="Create/Edit"/></h1>
                            <h:panelGrid columns="2">
                                <h:outputLabel value="Nom:" for="nom" />
                                <h:inputText id="nom" value="#{etudiantMbean.etudiant.nom}" title="Nom" required="true" requiredMessage="The Nom field is required."/>
                                <h:outputLabel value="Prenom:" for="prenom" />
                                <h:inputText id="prenom" value="#{etudiantMbean.etudiant.prenom}" title="Prenom" required="true" requiredMessage="The Prenom field is required."/>
                                <h:outputLabel value="DateNaiss:" for="dateNaiss" />
                                <h:inputText id="dateNaiss" value="#{etudiantMbean.etudiant.dateNaiss}" title="DateNaiss" required="true" requiredMessage="The DateNaiss field is required.">
                                    <f:convertDateTime pattern="MM/dd/yyyy" />
                                </h:inputText>
                                <h:outputLabel value="NumCNI:" for="numCNI" />
                                <h:inputText id="numCNI" value="#{etudiantMbean.etudiant.numCNI}" title="NumCNI" required="true" requiredMessage="The NumCNI field is required."/>
                                <h:outputLabel value="DateDelivCNI:" for="dateDelivCNI" />
                                <h:inputText id="dateDelivCNI" value="#{etudiantMbean.etudiant.dateDelivCNI}" title="DateDelivCNI" required="true" requiredMessage="The DateDelivCNI field is required.">
                                    <f:convertDateTime pattern="MM/dd/yyyy" />
                                </h:inputText>
                                <h:outputLabel value="AdrMail:" for="adrMail" />
                                <h:inputText id="adrMail" value="#{etudiantMbean.etudiant.adrMail}" title="AdrMail" />
                                <h:outputLabel value="Profession:" for="profession" />
                                <h:inputText id="profession" value="#{etudiantMbean.etudiant.profession}" title="Profession" />
                                <h:outputLabel value="Societe:" for="societe" />
                                <h:inputText id="societe" value="#{etudiantMbean.etudiant.societe}" title="Societe" />
                                <h:outputLabel value="NumTel:" for="numTel" />
                                <h:inputText id="numTel" value="#{etudiantMbean.etudiant.numTel}" title="NumTel" required="true" requiredMessage="The NumTel field is required."/>
                                <h:outputLabel value="NumFiche:" for="numFiche" />
                                <h:inputText id="numFiche" value="#{etudiantMbean.etudiant.numFiche}" title="NumFiche" required="true" requiredMessage="The NumFiche field is required."/>
                                <h:outputLabel value="MontantAttrib:" for="montantAttrib" />
                                <h:inputText id="montantAttrib" value="#{etudiantMbean.etudiant.montantAttrib}" title="MontantAttrib" required="true" requiredMessage="The MontantAttrib field is required."/>
                                <h:outputLabel value="DepotDossier:" for="depotDossier" />
                                <h:inputText id="depotDossier" value="#{etudiantMbean.etudiant.depotDossier}" title="DepotDossier" required="true" requiredMessage="The DepotDossier field is required."/>
                                <h:outputLabel value="RetraitPermis:" for="retraitPermis" />
                                <h:inputText id="retraitPermis" value="#{etudiantMbean.etudiant.retraitPermis}" title="RetraitPermis" required="true" requiredMessage="The RetraitPermis field is required."/>
                                <h:outputLabel value="SessionexamidSessionExam:" for="sessionexamidSessionExam" />
                                <h:selectOneMenu id="sessionexamidSessionExam" value="#{etudiantMbean.etudiant.sessionexamidSessionExam}" required="true" requiredMessage="The SessionexamidSessionExam field is required." converter="#{etudiantMbean.sessionExamConverter}">
                                    <!-- TODO: update below reference to list of available items-->
                                    <f:selectItems var="itemSessionexam" itemLabel="#{itemSessionexam.dateExam}" itemValue="#{itemSessionexam}" value="#{etudiantMbean.allSessionexam}"/>
                                </h:selectOneMenu>
                                <h:outputLabel value="FormationidFormation:" for="formationidFormation" />
                                <h:selectOneMenu id="formationidFormation" value="#{etudiantMbean.etudiant.formationidFormation}" required="true" requiredMessage="The FormationidFormation field is required." converter="#{etudiantMbean.formationConverter}">
                                    <!-- TODO: update below reference to list of available items-->
                                    <f:selectItems var="itemFormation" itemValue="#{itemFormation}" value="#{etudiantMbean.allFormations}" itemLabel="#{itemFormation.categorieFormation} #{itemFormation.typeFormation}"/>
                                </h:selectOneMenu>
                                <h:outputLabel value="AgenceidAgence:" for="agenceidAgence" />
                                <h:selectOneMenu id="agenceidAgence" value="#{etudiantMbean.etudiant.agenceidAgence}" required="true" requiredMessage="The AgenceidAgence field is required." converter="#{etudiantMbean.agenceConverter}">
                                    <!-- TODO: update below reference to list of available items-->
                                    <f:selectItems var="itemAgence" value="#{etudiantMbean.allAgences}" itemValue="#{itemAgence}" itemLabel="#{itemAgence.villeAgence} #{itemAgence.nomAgence}"/>
                                </h:selectOneMenu>
                                <h:commandButton value="Mettre à jour" action="#{etudiantMbean.update()}"/><h:commandButton value="Retour" action="EtudiantAffiche.xhtml"/>
                            </h:panelGrid>
                        </h:form>
                    </f:view>
Le problème est que lorsque je clique sur le bouton "Mettre à jour" ça ne modifie pas mais ça fait plustot un nouvel enregistrement dans la basse de données.

Le code source de la méthode update est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public String update(){
        etudiantFacade.updateEtudiant(etudiant);
        return "EtudiantAffiche";
    }
l'enterprise bean ici appelle la méthode updateEtudiant elle même contenue dans le session bean EtudiantFacade et le code source de cette méthode est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public void updateEtudiant(Etudiant etudiant){
        em.merge(etudiant);
    }

Je n'y comprend surtout rien surtout qu'il est à noter que lorsque je clique sur modifier, la page EtudiantDetails.xhtml s'ouvre bien avec les paramètres de l'étudiant à modifier mais la barre d'adresse du navigateur référence qu'on est sur la page EtudiantAffiche.xhtml. Et quand on clique sur mettre à jour ça affiche bien le datatable mais la barre d'adresse du navigateur référence qu'on est sur la page EtudiantDetails.xhtml.

Croyez moi j'y comprend rien!

SVP si quelqu'un a déjà été confronté à ce genre de problème je le prie de m'aider.

Merci d'avance pour tout.