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 :

Supprimer une ligne d'un dataTable depuis un dialog


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 Supprimer une ligne d'un dataTable depuis un dialog
    Bonjour,

    J'ai une dataTable qui contient des informations. J'ai un lien qui ouvre un dialogue permettant de créer une nouvelle ligne.

    Comme j'ai vu qu'il n'était pas bien d'avoir plusieurs dialog dans un même formulaire, j'ai donc 2 formulaires dans mon fichier xhtml.
    Le problème est que dans le managedBean du formualire du dialogue de création, je ne peux pas accéder à la liste affichée dans ma table, qui se trouve dans le managedBean du formulaire de la table.

    Comment est-ce que je peux résoudre ce problème ? Il faudrait que je puisse forcer une nouvelle recherche de la liste dans la base de données ...

    Voici mon code si besoin:
    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
    <?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">
    
    <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: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="dial">
    			<!-- boîte de dialogue -->
    			<p:confirmDialog widgetVar="confirmation" message="Confirmer la suppression" header="Entetes" severity="alert" >
    				<p:commandButton value="Oui" update=":formulaire:gestionSocietes" action="#{gestionSocietes.supprimerSociete}" oncomplete="confirmation.hide()"/>
    				<p:commandButton value="Non" onclick="confirmation.hide()" type="button"/>
    			</p:confirmDialog>
    		</h:form>
    		
    		<h:form id="gestionSocietes">
    			<p:contextMenu for=":formulaire:gestionSocietes:societes">
    				<p:menuitem value="Supprimer" onclick="PF('confirmation').show()"/>
    				<p:menuitem value="Ajouter" onclick="PF('userAjout').show()"/>
    			</p:contextMenu>
    			
    			<h2>
    				<h:outputText value="#{msg['GestionDesSocietes']}" />
    			</h2>
    			
    			<p:dataTable 	id="societes"
    							value="#{gestionSocietes.listSocietes}" 
    							var="societe" widgetVar="UserTable" filteredValue=""
    							emptyMessage="#{msg['AucuneSocieteAAfficher']}" 
    							selection="#{gestionSocietes.selectedSociete}" 
    							selectionMode="single"  editable="false" editmode="row"
    							rowKey="#{societe.id}" paginator="true" paginatorPosition="bottom"  
    							rows="10" style="margin-bottom:10px" 
    							paginatorTemplate=" {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
    							rowsPerPageTemplate="5,10,15">
    							
    				<f:facet name="header">  
                		<p:outputPanel>  
                    		<h:outputText value="Rechercher un utilisateur par login : " />  
                    		<p:inputText id="globalFilter" onkeyup="UserTable.filter()" style="width:150px" />  
                		</p:outputPanel>  
            		</f:facet>
    							
    				<p:column style="width:5%">
    					<f:facet name="header">
    	            		#
    	          		</f:facet>
    	         		 #{societe.id}
    	       		</p:column>
    				
    				<p:column style="width:20%">
    					<f:facet name="header">
    	            		#{msg['Abrege']}
    	          		</f:facet>
    	          		#{societe.abrege}
    	        	</p:column>
    				
    				<p:column style="width:30%">
    					<f:facet name="header">
    	            		#{msg['Nom']}
    	          		</f:facet>
    	          		#{societe.nom}
    	        	</p:column>
    	        	
    	        	<p:column style="width:45%">
    					<f:facet name="header">
    	            		#{msg['Description']}
    	          		</f:facet>
    	          		#{societe.description}
    	        	</p:column>
    				
    			</p:dataTable>
    		</h:form>
    		
    		<h:form id="ajouterSocieteBean">		<p:growl id="messages" showDetail="true"/>
                <p:dialog header="#{msg['NouvelleSociete']}" widgetVar="userAjout" resizable="false" id="userAjout" >
    	            <h:panelGrid id="ajoutDial" width="650" columns="3" style="margin:0 auto;">
    					<h:outputLabel for="abrege" value="#{msg['Abrege']} : " styleClass="mandatory" />
    					
    					<p:inputTextarea rows="1" cols="50" counter="countAbrege" maxlength="10" counterTemplate="{0} #{msg['CaracteresDisponibles']}" autoResize="false" styleClass="unresizable" />
    					<h:outputText id="countAbrege" />
    					
    					<h:outputLabel for="nom" value="#{msg['Nom']} : " styleClass="mandatory" />
    					<p:inputTextarea rows="2" cols="50" counter="countNom" maxlength="50" counterTemplate="{0} #{msg['CaracteresDisponibles']}" autoResize="false" styleClass="unresizable" />
    					<h:outputText id="countNom" />
    					
    					<h:outputLabel for="description" value="#{msg['Description']} : " />
    					<p:inputTextarea rows="5" cols="50" counter="countDesc" maxlength="2000" counterTemplate="{0} #{msg['CaracteresDisponibles']}" autoResize="false" styleClass="unresizable" />
    					<h:outputText id="countDesc" />
    					
    					<p:commandButton action="#{ajouterSocieteBean.ajouter}" update=":formulaire:gestionSocietes:societes messages" value="#{msg['Ajouter']}" icon="ui-icon-check"
    						style="margin:15px" oncomplete="userAjout.hide()"/>
    					<p:commandButton value="#{msg['Annuler']}" icon="ui-icon-check"
    						style="margin:15px" oncomplete="userAjout.hide()"/>
    			      	<!-- <p:message for="name" id="msg_name"/> -->
    				</h:panelGrid>
     			</p:dialog>
     		</h:form>
    	</ui:define>
    </ui:composition>
    Le bean du formulaire du dialogue
    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
     
    @ManagedBean(name = "ajouterSociete")
    @RequestScoped
    public class AjouterSocieteBean {
     
    	private String abrege;
    	private String nom;
    	private String description;
     
    	/**
             * Default Constructor
             */
    	public AjouterSocieteBean() {
    	}
     
    	public String getAbrege() {
    		return abrege;
    	}
     
    	public void setAbrege(String abrege) {
    		this.abrege = abrege;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getDescription() {
    		return description;
    	}
     
    	public void setDescription(String description) {
    		this.description = description;
    	}
     
    	public void ajouter() {
    		Societe societe = new Societe();
    		societe.setAbrege(abrege);
    		societe.setNom(nom);
    		societe.setDescription(description);
     
    		// ICI ajouter la societe a la liste de la table
    	}
    }
    Le bean du formulaire de la table
    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
     
    @ManagedBean(name = "gestionSocietes")
    @RequestScoped
    public class GestionSocietesBean {
     
    	private List<Societe> listSocietes;
    	private Integer societeId;
    	private Societe selectedSociete;
     
    	@EJB
    	private SocieteDaoImpl m_societeDao;
     
    	/**
             * Default Constructor
             */
    	public GestionSocietesBean() {
    	}
     
    	public SocietesDataTableModel getListSocietes() {
    		listSocietes = new ArrayList<>();
     
    		for (int i = 0; i < 8; i++) {
    			Societe u = new Societe();
    			u.setId(i);
    			u.setAbrege("nicolas");
    			u.setNom("nom");
    			listSocietes.add(u);
    		}
     
    		return new SocietesDataTableModel(listSocietes);
    	}
     
    	public Integer getSocieteId() {
    		return this.societeId;
    	}
     
    	public void setSocieteId(Integer societeId) {
    		this.societeId = societeId;
    	}
     
    	public Societe getSelectedSociete() {
    		return this.selectedSociete;
    	}
     
    	public void setSelectedSociete(Societe selectedSociete) {
    		this.selectedSociete = selectedSociete;
    	}
     
    	public void modifierSociete() {
    		// TODO
    	}
     
    	public void supprimerSociete() {
    		for (Societe soc  :listSocietes) {
    			if (societeId == soc.getId()) {
    				listSocietes.remove(soc);
    				break;
    			}
    		}
    	}
     
    }
    Merci d'avance pour votre aide

  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 une raison qui t'oblige à avoir 2 managedBean différents pour une même page xhtml ?

  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
    bonjour,

    sur le fond non il n'y a aucune raison c'est vrai ....

  4. #4
    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
    Pour ma part, je trouve surtout qu'il n'y a aucune raison de sortir ta confirmDialog, c'est tellement light qu'il vaut mieux la laisser là où tu en as besoin...
    D'ailleurs, dans ce cas de figure, tu perds l'avantage de pouvoir conditionner le traitement d'un bouton sur la réponse du dialogue... bref, tu devrais le laisser dans la même page
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    Merci pour vos réponses :-)

    Je ne sui spas encore suffisamment à l'aise pour comprendre l'avantage que tu cites :
    tu perds l'avantage de pouvoir conditionner le traitement d'un bouton sur la réponse du dialogue...
    Qu'entends-tu par là ?

  6. #6
    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
    L'intérêt de confirmDialog est dans un usage de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p:commandButton action="#{constrManager.delete()}" value="#{msg.button_delete}">
         <p:confirm header="Confirmation" message="Veuillez confirmer la suppression du constructeur" icon="ui-warning"/>
    </p:commandButton>
    et d'avoir la définition de la boite de dialogue dans un template (typiquement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
        <!-- Boite de confirmation -->
        <p:confirmDialog id="globalConfirmDialog" global="true" showEffect="fade" hideEffect="fade">
             <p:commandButton value="#{msgc.yes}" type="button" styleClass="ui-confirmdialog-yes"/>
             <p:commandButton value="#{msgc.no}" type="button" styleClass="ui-confirmdialog-no" />
        </p:confirmDialog>
    ...
    comme tu vois, l'action du bouton est conditionnée par la réponse de la boite de dialogue de confirmation qui est globale à l'application
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    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 mais comment tu fais le lien ?
    J'aurais pensé qu'il y avait un id commun, mais ce n'est pas le cas dans ton exemple

  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
    Le lien est fait par Primefaces, <p:confirm> va sur <p:confirmDialog>, et il n'y a qu'une seule définition de <p:confirmDialog> mais n demandes de confirmation par <p:confirm>
    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, je comprends mieux
    Merci beaucoup pour ces explications

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

Discussions similaires

  1. Supprimer une ligne d'une dataTable
    Par daydream123 dans le forum JSF
    Réponses: 2
    Dernier message: 15/06/2015, 13h33
  2. supprimer une ligne d'une datatable
    Par monoar dans le forum VB.NET
    Réponses: 12
    Dernier message: 17/07/2008, 11h56
  3. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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