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 :

Récupérer résultat d'une boolean checkbox


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut Récupérer résultat d'une boolean checkbox
    Bonjour alors voila mon bout de code :

    fichier 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
    <h:form>
         <h:dataTable value="#{personneService.personnes}" var="_pers" border="2">
             <f:facet name="header">
                  <h:outputText value="Liste des joueurs" />
             </f:facet>
         <h:column>
              <h:selectBooleanCheckbox value="#{personneService.setpersonnesSelectionnees[_pers]}" />
         </h:column>
    .
    .
    .
    </h:dataTable>
        </h:form>
             <h:commandButton 
                   action="#{personneService.supprimer()}" 
                   value="Supprimer la slection">
             </h:commandButton>
    fichier de service :
    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
     
    private List<Personne> personnes = new ArrayList<Personne>();
    private Map<Personne,Boolean> personnesSelectionnees;
     
    public void supprimer() {
        if (personnesSelectionnees != null){
            System.out.println("personnes selectionnees pas null");
            for (Personne pers : personnesSelectionnees.keySet()){
                  if(personnesSelectionnees.get(pers) == true){
                         Personne toDelete = em.merge(pers);
                         em.remove(toDelete);
                  }
            }
        }
    }
    Ca ne fonctionne pas.
    je suis débutant en JSF, si vous pouviez m'aider...

    Merci beaucoup!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    Assure toi déjà que ta Map ai un getter et un setter.

    Ensuite, quand tu utilise une EL ( le #{ ... } ), il faut jamais prefixer avec set ou get, c'est géré tout seul.

    Essaye en remplacant par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectBooleanCheckbox value="#{personneService.personnesSelectionnees[_pers]}" />

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Merci beaucoup pour cette réponse rapide.
    Pour le set, oui désolé, j'avais essayé de la mettre ne voyant que ça ne fonctionnait pas autrement.
    J'ai bien les getter et setter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         public Map<Personne, Boolean> getPersonnesSelectionnees() {
    		return personnesSelectionnees;
    	}
     
    	public void setPersonnesSelectionnees(
    			Map<Personne, Boolean> personnesSelectionnees) {
    		this.personnesSelectionnees = personnesSelectionnees;
    	}
    je n'ai pas d'erreur lorsque j'ouvre la page mais quand je coche une ligne et que j'appuie sur supprimer, rien ne ce fait!
    Je n'ai d'ailleur pas le System.out.println que j'ai mis dans la méthode supprimer !

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    action="#{personneService.supprimer}"
    Il ne faut pas mettre les () à la fin.


    Sinon je te conseille de lire quelques posts de ce forum concerne le design... Parce que lier directement la couche service avec les pages JSF c'est pas forcément la meilleure chose à faire
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Ton bean doit être en scope request, soit tu fais en sorte de persister les données de ton arrayliste de personnes avec un savestate par exemple, soit tu passes ton managed bean en mode session.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Re bonsoir!

    Merci pour vos réponses.
    Alors j'ai enlever les parenthèses sur l'appel a la méthode supprimer.
    J'ai aussi modifier le type du Scope et ai mis SESSION (il était à PAGE avant).
    Je ne sais pas si c'est ce que tu voulais dire heid ?

    Je pense que le problème viens plutôt de l'enregistrement de la Personne dans la Map personnesSelectionnees car dans le supprimer je fait un system.out.printlln si cette liste n'est pas nulle, ors il ne me l'affiche jamais! Donc pour moi, soit il n'y a ajmais d'enregistrement dans la Map personnesSelectionnees soit alors on ne rentre jamais dans la méthode supprimer :s

  7. #7
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut
    primo y'a pas de scope page dans JSF.
    <h:dataTable value="#{personneService.personnes}" var="_pers" border="2">
    <f:facet name="header">
    <h:outputText value="Liste des joueurs" />
    </f:facet>
    <h:column>
    <h:selectBooleanCheckbox value="#{personneService.setpersonnesSelectionnees[_pers]}" />
    </h:column>
    .
    .
    .
    </h:dataTable

    a sa je comprend rien ??? tu veux faire quoi avec ton check box ???

    personellement je croix que tu t'es lance sur jsf sans avoir lis quelque chose
    car dans les EL on fais pas appelle a des methodes parametere a moin t'as fais une extension a l'EL.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Alors si j'ai lu des tuto JSF contrairement à ce que tu dis. Je débute simplement !

    La partie que tu ne comprend pas est simplement un tableau dans lequel la première colonne est une checkBox et les autres me donnes les nom, prénom,... etc des personnes étant dans ma base.
    Je veux que quand on coche ou décoche la chekbox, que la personne en question soit ajoutée ou supprimée dans ma Map personnesSelectionnees afin de pouvoir en supprimer plusieurs à la fois en cliquant sur le bouton supprimer.
    J'avais auparavant mis le bouton supprimer sur chaque ligne de mon tableau et comme ceci ça fonctionnait très bien.

    j'espère avoir été clair...

  9. #9
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut
    ok

    voila moi ce que je te propose :
    Cree une Classe PersonneRow qui est comme suit

    public class PersonneRow{
    private boolean checked;
    private String nom;

    // faire les accessor
    }

    puis t'as ton tableau
    <h:dataTable value="#{personneService.personnes}" var="pers" border="2">
    <f:facet name="header">
    <h:outputText value="Liste des joueurs" />
    </f:facet>
    <h:column>
    <h:selectBooleanCheckbox value="#{pers.checked}" />
    </h:column>
    <h:column>
    <h:selectBooleanCheckbox value="#{pers.nom}" />
    </h:column>
    </h:dataTable>

    dans ton backing bean:

    private List<PersonneRow> personnes = new ArrayList<PersonneRow>();

    et vire le hashmap

    lors de la suppression parcours la liste personnes et supprime ce avec checked true

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Ok, merci, je vais essayé tout ça!
    Au vu de de que tu fais, on ne pourrait pas simplement rajouter un attribut boolean checked a ma classe Personne?

    PS : on peut mettre des choses comme ca :
    <h:commandButton action="#{personneService.enregistrer()}" value="Enregistrer"></h:commandButton>
    Ce qui va bien appeler la méthode enregistrer() de ma classe PersonneService (et ça fonctionne bien )

  11. #11
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut
    oui tu peux mais personellement je laisse les nonm comme personne, et tous ce qui reflete le business a mes entite jPA

    sinon pour ton bouton enleve les parathese a enregistrer

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Voila, ca fonctionne, enfin non mais les methodes sont appelées correctement et il voit les joueurs qui sont cochés.

    J'ai une erreure lors de la suppression :
    GRAVE: java.lang.IllegalArgumentException: Removing a detached instance testNico.Personne#1
    Voila le code de ma méthode supprimer :
    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
     
    public void supprimer() {
    	Iterator<Personne> it = personnes.iterator();
    	while (it.hasNext()){
    		Personne p = it.next();
    		if(p.isChecked()){
    			em.merge(p);
    			System.out.println("em.merge okkkkkkkkkk");
    			em.remove(p);
    			System.out.println("em.remove okkkkkkkkkk");
    			personnes.remove(p);
    		}
    	}
    	em.flush();
    }
    Le problème c'est le em.remove(), pourtant j'ai bien rattaché l'objet p avant avec le em.merge() ?

  13. #13
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut
    c'est du jpa ca ??????
    qu'es qu'il fais ici??,

    le problem c'est que ton entite est detache du contexte de persistence.

    il faux eviter d'utiliser du business dans les backings beans

  14. #14
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Citation Envoyé par seddik_saber Voir le message
    il faux eviter d'utiliser du business dans les backings beans
    J'aurais plutôt dit qu'il faut éviter d'appeller le service depuis son JSF et donc de créer le backing bean adéquat, mais on est d'accord
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Et sinon à par demander ce que je fou ici (je pense venir chercher de l'aide...) et me traduire le message d'erreur que j'avais très bien compris quelle serait la solution à mon soucis.

    Comme je l'ai dit, je pensais que le merge permettait de lier mon objet!

    Merci de m'expliquer plutôt que de dénigrer, c'est souvent plus constructif


    Bon, j'ai résolu mon problème tout seul, j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(p.isChecked()){
    	Personne pers = em.merge(p);
    	em.remove(pers);
    	personnes.remove(pers);
    }
    Merci

  16. #16
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut

    Et sinon à par demander ce que je fou ici (je pense venir chercher de l'aide...)
    je parlais pas de toi mais du entity manager

  17. #17
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Scope page + lier le jsf à un EJB.... Tu serais pas sur SEAM toi par hazard?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Si si

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

Discussions similaires

  1. Récupérer résultat d'une fenêtre DOS
    Par besly dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 07/11/2008, 14h45
  2. Récupérer résultat d'une requête
    Par nerila dans le forum Bases de données
    Réponses: 10
    Dernier message: 02/03/2007, 12h53
  3. Récupérer résultat d'une rotation
    Par Burckel dans le forum OpenGL
    Réponses: 5
    Dernier message: 14/12/2006, 17h08
  4. [VBA-E] Récupérer résultat d'une requête
    Par ragnarök dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2006, 16h21
  5. Réponses: 5
    Dernier message: 30/06/2005, 10h28

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