Mettre à jour une ligne dans un p:datatable
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:
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:
showDetails(Etudiant etud)
pour récuperer un étudiant et transmettre à la page EtudiantDetails.xhtml:
Voici la méthode showDetails:
Code:
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:
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:
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:
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.