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 :

primefaces p collector [JSF 2.X]


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 35
    Points : 32
    Points
    32
    Par défaut primefaces p collector
    Salut. J'utlise un p collector dans un p dialogue pour récupérer des données dans un p datatable. mais il se trouve qu'a partir de la deuxième insertion il n'ajoute pas une nouvelle ligne dans le p datatable mais remplace la première insertion. J'utilise primefaces 5.0.
    voici une partie de la vue
    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
     
    <h:form id="commanderform">
                       <p:growl id="msgs" />
                       <h:panelGroup id="display" >
                       <p:fieldset legend="INFORMATIONS SUR LES PRODUITS COMMANDES"  >
                        <h:panelGrid columns="8">
                         outputLabel value="#{bundle.CreateCommanderLabel_prixUniteCom}" for="prixUniteCom" />
                            <p:inputText id="prixUniteCom" value="#{viewCommander.commander.prixUniteCom}" title="#{bundle.CreateCommanderTitle_prixUniteCom}" required="true" requiredMessage="#{bundle.CreateCommanderRequiredMessage_prixUniteCom}"/>
                            <p:outputLabel value="#{bundle.CreateCommanderLabel_qteCom}" for="qteCom" />
                            <p:inputText id="qteCom" value="#{viewCommander.commander.qteCom}" title="#{bundle.CreateCommanderTitle_qteCom}" required="true" requiredMessage="#{bundle.CreateCommanderRequiredMessage_qteCom}"/>
     
                            <p:outputLabel value="#{bundle.CreateCommanderLabel_produit}" for="produit" />
                            <p:selectOneMenu id="produit" value="#{viewCommander.commander.produit}" required="true" requiredMessage="#{bundle.EditCommanderRequiredMessage_produit}">
                                <f:selectItems value="#{produitController.produit}"
                                               var="produitItem"
                                               itemValue="#{produitItem}"/>
                            </p:selectOneMenu>
                             <p:commandButton id="btn_reset" value="Reset" type="reset"/>
                             <p:commandButton id="createButton" icon="ui-icon-plus" ajax="true" update="dataliste msgs @parent"  value="ajouter"   >
                                <p:collector   value="#{viewCommander.commander}"  addTo="#{viewCommander.commanders}" unique="false"  />   </p:commandButton>
                        </h:panelGrid>
     
                        </p:fieldset>
     
                    </h:panelGroup>
    le managedbean
    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
    /*
    @ManagedBean
    @RequestScoped
    public class viewCommander {
     
        public viewCommander() {
        }
        private List<Commander> commanders = new ArrayList<>();
    	private Commander commander = new Commander();
    	public List<Commander> getCommanders() {
    		return commanders;
    	}
    	public void setCommanders(List<Commander> commanders) {
    		this.commanders = commanders;
    	}
    	public Commander getCommander() {
    		return commander;
    	}
    	public void setCommander(Commander commander) {
    		this.commander = commander;
    	}
    }
    le hash code et le equals qui se trouvent dans la classe
    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
     public int hashCode() {
           int hash = 0;
            hash += (commanderPK != null ? commanderPK.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Commander)) {
                return false;
            }
            Commander other = (Commander) object;
            if ((this.commanderPK == null && other.commanderPK != null) || (this.commanderPK != null && !this.commanderPK.equals(other.commanderPK))) {
                return false;
            }
            return true;
        }

  2. #2
    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 scope @RequestScoped n'est vraiment pas approprié là, tu devrais utiliser @ViewScoped.
    Avec @RequestScoped, ton ManagedBean (et ce qu'il contient) est recréé à chaque requête, ta liste repart donc toujours vide. Normalement, si tu fais F5 sur ta page, tu devrais avoir une liste vide
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 35
    Points : 32
    Points
    32
    Par défaut primefaces p collector
    ok j'ai ajouté une fonction reinit qui s'exécute (actionlistener) au clic du bouton create et modifier le bean pour utiliser viewscoped. Donc le datatable accepte désormais de nouvelles lignes mais toutefois donne la possibilité d'entrer des lignes identiques ce qui ne devrait pas être le cas. En effet la même désignation de produit ne doit pas figurer sur plusieurs lignes du datatable à la fois. Je cherche une idée pour comparer la valeur entrée nouvellement aux anciennes présentes dans le datatable avant de l'insérer ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public String reinit() {  
        commander=new Commander();
         return null;
        }

  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
    As-tu essayé l'attribut 'unique' du tag <p:collector> ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    oui j'ai essayé l'attribut unique. Quand je le mets à true le datatable n'accepte que l'ajout d'une seule ligne même quand j'entre d'autres valeurs différentes de celle qui est présente. J'ai l'impression que la solution serait de modifier soit mon hash code ou mon equals. je l'ai modifié pourtant pas le résultat voulu. Aussi Comme les définitions de ces deux méthodes sont utiles pour d'autres besoins je cherche une autre solution sinon j'accepterais quand même d'abord toute solution qui marche.

  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
    Ta méthode hashCode() fait référence à un objet CommanderPK, si celui-ci est null après ton ajout (et j'imagine que c'est le cas vu ce que tu décris), c'est normal que tu ne puisses ajouter qu'une ligne puisque tu renvois 0 si cet objet est null.
    La solusion consisterait à faire un super.hashCode() dans ce cas, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public int hashCode() 
    {
        int hash = 0;
        hash += (commanderPK != null ? commanderPK.hashCode() : super.hashCode());
        return hash;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    J'ai modfié les méthodes comme ceci pour le collector fonctionne. Ta proposition n'avait pas fonctionné. Merci à tous!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       @Override
     public int hashCode() {
           int hash = 1;
           if(produit!= null)
               hash = hash * 31 + produit.hashCode();
     
     
           return hash;   }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       public boolean equals(Object obj) {
            if(!(obj instanceof Commander))
                return false;
     
            Commander commander = (Commander) obj;
     
            return (commander.getProduit()!= null && commander.getProduit().equals(produit) );
        }

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

Discussions similaires

  1. [JVM] Java 5 et Garbage Collector(Parralèle)
    Par ssaunois dans le forum Général Java
    Réponses: 6
    Dernier message: 28/11/2005, 23h42
  2. [JVM]Garbage collector
    Par godik dans le forum Général Java
    Réponses: 5
    Dernier message: 07/10/2005, 09h12
  3. JPanel et Garbage Collector
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 25/07/2005, 18h03
  4. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57
  5. [Language]Garbage collector
    Par GETah dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 15h18

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