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 :

[dataTable] La table ne se met pas à jour après suppression d'une ligne


Sujet :

JSF Java

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut [dataTable] La table ne se met pas à jour après suppression d'une ligne
    Bonjour,

    J'ai une dataTable dans laquelle je peux supprimer des lignes via un commandLink et un dialogue de confirmation.
    Le problème est qu'après suppression, la liste ne se met pas à jour et je dois rafraichir la page pour voir disparaitre la ligne supprimée.

    Ce qui est bizarre, c'est que ça marchait à un moment donné et d'un coup par hasard, j'ai remarqué que ça ne fonctionnait plus. J'ai beau regarder les modifs faites, je ne vois pas ce qui pourrait engendrer ça.

    Voici la page et le 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
    <ui:composition template="../../secured/modele/template.xhtml"
    	xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:c="http://java.sun.com/jsp/jstl/core">
    	<ui:define name="contenu">
    		<h:form id="gestionIdentitesForm">
    			
    			<!-- <p:growl id="messages" life="2000" />  -->
    			
    			<!-- Dialogue de confirmation de suppression d'une identité -->
    			<p:dialog header="#{msg['ConfirmerLaSuppression']}" widgetVar="confDeleteDlg" resizable="false" id="confDelDlg"
                                showEffect="fade" hideEffect="fade" >
                	<p:outputLabel value="#{msg['EtesVousSurDeVouloirSupprimerCetteIdentite']}" />
                    <div align="center">
    	                <h:panelGrid id="display" columns="2" cellpadding="10">
    	                	<p:commandButton id="deleteButton" action="#{gestionIdentitesForm.supprimerIdentite}" oncomplete="PF('confDeleteDlg').hide()" 
    	                            update=":gestionIdentitesForm:identites, messages" value="#{msg['Oui']}" />
    	                	<p:commandButton id="cancelButton" onclick="PF('confDeleteDlg').hide()" value="#{msg['Non']}"/>
    	                </h:panelGrid>
                    </div>
                </p:dialog>			
    			<!-- Tableau d'affichage des identités -->
    			<h2>
    				<h:outputText value="#{msg['GestionDesIdentites']}" />
    			</h2>
    			
    			<p:dataTable 	id="identites"							
                                                           value="#{gestionIdentitesForm.listIdentites}" 
    							var="identite" widgetVar="identiteTable" filteredValue="#{gestionIdentitesForm.listIdentitesFiltered}"
    							emptyMessage="#{msg['AucuneIdentiteAAfficher']}" 
    							sortMode="multiple"
    							rowKey="#{identite.id}" paginator="true" paginatorPosition="bottom"  
    							rows="10" style="margin-bottom:10px" 
    							paginatorTemplate=" {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
    							rowsPerPageTemplate="10,30,50">
    							
    				<f:facet name="header">
                		<p:outputPanel>
                			<div align="left">
                				<p:link outcome="saisirIdentite" value="# #{msg['AjouterUneIdentite']}" />
                    		</div>
                		</p:outputPanel>  
            		</f:facet>
    						
    				<p:column style="width:16px">  
    		            <p:rowToggler />  
    				</p:column>  
    						
    				<p:column headerText="#{msg['ID']}" style="width:3%" rendered="#{gestionIdentitesForm.userSuperAdmin}" >
    	         		<h:outputText value="#{identite.id}" />
    	       		</p:column>
    	       		
    	       		<p:column filterBy="#{identite.typeIdentiteCi}" filterOptions="#{gestionIdentitesForm.typesIdentiteOptions}" filterMatchMode="exact" headerText="#{msg['Type']}" style="width:10%">
    					<h:outputText value = "#{identite.typeIdentiteCi.nom}" />
    	        	</p:column>
    	       		
    				<p:column sortBy="#{identite.nom}" headerText="#{msg['Nom']}" style="width:10%" filterBy="#{identite.nom}" filterMatchMode="contains" >
    	          		 <h:outputText value="#{identite.nom}" />
    	        	</p:column>
    				
    				<!-- filterMatchMode="startsWith" -->
    				<p:column sortBy="#{identite.prenom}" headerText="#{msg['Prenom']}" style="width:10%" filterBy="#{identite.prenom}" filterMatchMode="contains" >
    	          		<h:outputText value="#{identite.prenom}" />
    	        	</p:column>
    	        	
    	        	<p:column sortBy="#{identite.raisonSociale}" headerText="#{msg['RaisonSociale']}" style="width:15%" filterBy="#{identite.raisonSociale}" filterMatchMode="contains" >
    	          		<h:outputText value="#{identite.raisonSociale}" />
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['Rue']}" style="width:15%">
    	          		<h:outputText value="#{identite.adressePrincipale.rueNumero}" />
    	        	</p:column>
    	        	
              		<!-- Affiche soit la localité pré-enregistrée, la localité libre ou un message -->
    	        	<p:column headerText="#{msg['Localite']}" style="width:10%">
    	          		<h:outputText value="#{identite.adressePrincipale.localite}" rendered="#{not empty identite.adressePrincipale.localite.nom}"/>
    	          		<h:outputText value="#{identite.adressePrincipale.codePostalLibre} #{identite.adressePrincipale.localiteLibre}" rendered="#{not empty identite.adressePrincipale.localiteLibre}" />
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['NoTelProf']}" style="width:8%">
    	          		<h:outputText value="#{identite.adressePrincipale.noTelProf}" />
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['NoTelMobile']}" style="width:8%">
    	          		<h:outputText value="#{identite.adressePrincipale.noTelMobile}" />
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['Actions']}" style="width:7%">
    	          		<p:link value="# #{msg['Modifier']}" outcome="saisirIdentite" >
                 			<f:param name="idIdentite" value="#{identite.id}" />
             	 		</p:link>
    					/
             	 		<p:commandLink value="# #{msg['Supprimer']}" onclick="PF('confDeleteDlg').show()" >
             	 			<f:setPropertyActionListener target="#{gestionIdentitesForm.selectedIdentite}" value="#{identite}" />
             	 		</p:commandLink>	        	
                            </p:column>
    	        	
    	        	<p:rowExpansion>  
        				<h:panelGrid id="displayDetail" columns="4" cellpadding="10" style="margin-bottom:10px; margin-top:10px; width:1000px;"
                    		columnClasses="detailTitre, detailValeur, detailTitre, detailValeur">  
    
            				<h:outputText value="#{msg['CasePostale']}" />  
            				<h:outputText value="#{identite.adressePrincipale.casePostale}" />  
    	
    						<h:outputText value="#{msg['Email']}" />
    						<a href="mailto:#{identite.adressePrincipale.email}" >#{identite.adressePrincipale.email}</a>
    
    						<h:outputText value="#{msg['Canton']}" />  
            				<h:outputText value="#{identite.adressePrincipale.localite.canton}" />  
    
    						<h:outputText value="#{msg['NoTelPrive']}" />  
            				<h:outputText value="#{identite.adressePrincipale.noTelPrive}"/>    				  
    
    						<h:outputText value="#{msg['Pays']}" />  
            				<h:outputText value="#{identite.adressePrincipale.pays}" />  
    
            				<h:outputText value="#{msg['NoFax']}" />  
            				<h:outputText value="#{identite.adressePrincipale.noFax}"/>  
        				</h:panelGrid>  
    				</p:rowExpansion>  
    	        	
    	        	<f:facet name="footer">  
    					#{fn:length(gestionIdentitesForm.listIdentites)} #{msg['IdentitesEnregistrees']}  
    				</f:facet>
    	        	
    	        	
    			</p:dataTable>
    			
    		 	<p:messages id="messages" autoUpdate="true" globalOnly="true" />
     		</h:form>
    	</ui:define>
    </ui:composition>
    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
    @ManagedBean(name = "gestionIdentitesForm")
    @ViewScoped
    public class GestionIdentitesForm implements Serializable {
    
    	private static final long serialVersionUID = 1L;
    
    	private List<Identite> listIdentites;
    	private List<Identite> listIdentitesFiltered;
    	private Identite selectedIdentite;
    	private List<TypeIdentiteCi> listTypeIdentite;
    	
    	private SelectItem[] typesIdentiteOptions;
    	
    	@EJB
    	private IdentiteService m_identiteService;
    	
    	/**
    	 * Default Constructor
    	 */
    	public GestionIdentitesForm() {
    		typesIdentiteOptions = createFilterOptions();  
    	}
    	
    	public boolean isUserSuperAdmin() {
        	FacesContext context = FacesContext.getCurrentInstance();
            ExternalContext externalContext = context.getExternalContext();
            HttpSession session = ((HttpServletRequest) externalContext.getRequest()).getSession();
     
            Employe currentUser = (Employe) session.getAttribute("user");
            
            return currentUser != null && currentUser.isSuperAdmin();
        }
    	
    	public List<TypeIdentiteCi> getListTypeIdentite() {
    		if (listTypeIdentite == null) {
    			listTypeIdentite = new ArrayList<>();
    			listTypeIdentite.add(TypeIdentiteCi.PHYSIQUE);
    			listTypeIdentite.add(TypeIdentiteCi.MORALE);
    		}
    		
    		return listTypeIdentite;
    	}
    	
    	public List<Identite> getListIdentites() {
    		if (listIdentites == null) {
    			listIdentites = m_identiteService.getIdentiteList();
    		}
    		
    		return listIdentites;
    	}
    	
    	public void setListIdentites(List<Identite> listIdentites) {
    		this.listIdentites = listIdentites;
    	}
    	
    	public List<Identite> getListIdentitesFiltered() {
    		return listIdentitesFiltered;
    	}
    	
    	public void setListIdentitesFiltered(List<Identite> listIdentitesFiltered) {
    		this.listIdentitesFiltered = listIdentitesFiltered;
    	}
    	
    	public void supprimerIdentite() {
    		try {
    			m_identiteService.deleteIdentite(selectedIdentite);
    
    			ajouterMessage("LIdentiteAEteSupprimeeAvecSucces", FacesMessage.SEVERITY_INFO);
    		} catch (Throwable e) {
    			ajouterMessage("ImpossibleDeSupprimerLIdentite", FacesMessage.SEVERITY_INFO);
    
    			ajouterMessage(e.getCause().getCause().getMessage(), FacesMessage.SEVERITY_ERROR);
    		}
    	}	
    	public Identite getSelectedIdentite() {
    		return selectedIdentite;
    	}
    
    	public void setSelectedIdentite(Identite selectedIdentite) {
    		this.selectedIdentite = selectedIdentite;
    	}
    
    	private void ajouterMessage(String message, Severity severity) {
    		FacesContext facesContext = FacesContext.getCurrentInstance();
    		Flash flash = facesContext.getExternalContext().getFlash();
    		flash.setKeepMessages(true);
    		flash.setRedirect(true);
    		facesContext.addMessage(null,
    				Messages.getMessage(message, severity, null));
    	}
    
    	public SelectItem[] getTypesIdentiteOptions() {  
    		return typesIdentiteOptions;  
    	}
    
    	private SelectItem[] createFilterOptions() {
    		SelectItem[] options = new SelectItem[3];
    
    		options[0] = new SelectItem("", Messages.getString("Tous", null));
    		options[1] = new SelectItem(TypeIdentiteCi.PHYSIQUE.getNom(), TypeIdentiteCi.PHYSIQUE.getNom());
    		options[2] = new SelectItem(TypeIdentiteCi.MORALE.getNom(), TypeIdentiteCi.MORALE.getNom());
    		
    		return options;
    	}  
    }
    Qqun a-t-il une idée ?
    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    il faut que tu utilises l'attribut update dans ton button de suppression pour rafraîchir le tableau

  3. #3
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    c'est bien ce que j'utilise ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p:commandButton id="deleteButton" action="#{gestionIdentitesForm.supprimerIdentite}" oncomplete="PF('confDeleteDlg').hide()" 
      update=":gestionIdentitesForm:identites, messages" value="#{msg['Oui']}" />
    <p:commandButton id="cancelButton" onclick="PF('confDeleteDlg').hide()" value="#{msg['Non']}"/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p:dataTable 	id="identites"	               
                  value="#{gestionIdentitesForm.listIdentites}" 
                            .....
    </dataTable>

  4. #4
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Salut,
    apres suppression,
    tu devrais actualiser la liste des identites.

    soit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listIdentites.remove(index_de_ce_que_tu_viens_de_supprimer);

    ou par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      listIdentites = m_identiteService.getIdentiteList();
    n´oublies pas le
    dans ta commande du bouton de suppression

    Eric

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas de virgule pour séparer les différents composants à recharger dans "update"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update=":gestionIdentitesForm:identites, messages"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Effectivement, je ne chargeais la liste que la première fois et je ne la mettais plus à jour par la suite

    Par contre:

    @jeffray03 : Je n'ai pas ajouté "process="@this" et ça fonctionne quand même. A quoi sert-il exactement ?

    @OButtelin : J'ai essayé avec et sans virgule, ça marche dans les 2 cas. Quelle est la meilleure solution ?

    Merci à vous pour votre aide

  7. #7
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    process : determines le(s) id(s) des composantes a envoyer au Server

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    D'après la documentation, c'est une liste d'identifiants séparés par un blanc.

    Pour le process="@this", dans ton cas, il ne sert à rien puisque tu affectes la valeur de la clé par le <f:setPropertyActionListener>.
    De manière générale, l'attribut "process" sert à définir la ou les propriétés à envoyer lors d'une requête partielle (typiquement ajax).
    Il est à noter qu'avec Primefaces, le fonctionnement est plutôt aléatoire avec le <p:ajax>, j'ai constaté que ceci fonctionnait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p:inputText id="champ1" value="...">
       <p:ajax event="change" process="champ1" .../>
    </p:inputText>
    alors que ceci ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p:inputText id="champ1" value="...">
       <p:ajax event="change" process="@parent" .../>
    </p:inputText>
    On serait en droit de penser que le parent du composant contient le champ traité...

    Bref, avec les id, on sait mieux ce qu'on fait
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Ok, merci pour ces informations :-)

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

Discussions similaires

  1. SqlDataSource ne met pas à jour "UN CHAMP" d'une table
    Par hidjudju dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/04/2011, 08h00
  2. [script.aculo.us] element.observer ne se met pas à jour après un ajax.updater
    Par PapyFouras dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 16/01/2010, 11h19
  3. ma table ne se met pas à jour
    Par sfrsky dans le forum Débuter
    Réponses: 2
    Dernier message: 18/06/2009, 12h48
  4. Ma table ne se met pas à jour
    Par pbauquel dans le forum Accès aux données
    Réponses: 3
    Dernier message: 28/04/2009, 22h38
  5. [AJAX] Ma table ne se met pas à jour (PHP et AJAX)
    Par beegees dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/02/2009, 13h10

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