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 :

Blocs à occurence


Sujet :

JSF Java

  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut Blocs à occurence
    Bonjour tout le monde,

    je voulais savoir comment fait-on les blocs à occurrence? par exemple, une personne peu avoir plusieurs enfants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <h:panelGroup id="personne">
        <h:panelGroup id="enfant">
         ...
        </h:panelGroup>
    </h:panelGroup>
    <h:commandButton id="ajouterEnfant" value="Ajouter" />
    Je voudrais ajouter le bloc enfant quand je clique sur ajouter. Une petite idée de comment faire?

    Merci!

  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
    Quelque chose qui ressemble à ça ? (le "paginator" est optionnel)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Le lien est pas mal, je connaissais pas mais il ne m'aide pas trop dans mon cas...
    Ce que j'ai fait est tout basique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <ui:repeat value="#{managedBean.enfants}" var="enfant">
    <h:panelGroup id="personne">
        <h:panelGroup id="enfant">
         ...
        </h:panelGroup>
    </h:panelGroup>
    </ui:repeat>
    <h:commandButton id="ajouterEnfant" value="Ajouter" action="#{managedBean.ajouterEnfant}"/>
    La méthode ajouterEnfant() est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void ajouterEnfant() {
            enfants.add(new Enfant());
        }
    Le problème c'est que tout ce que je rentre dans mes champs enfant sont perdus...

  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
    Primefaces est effectivement LA bibliothèque de composants JSF2
    Je te montrais le lien parce qu'il me semblait que tu n'arrivais pas à ajouter "graphiquement" l'objet dans ta page.
    Si je comprends bien ton dernier post, de ce côté, c'est bon...

    Quand tu dis : "Le problème c'est que tout ce que je rentre dans mes champs enfant sont perdus"

    Tu récupères bien les valeurs dans ton manager mais tu ne les réaffiches plus ou tu ne les récupère même pas ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Je ne les récupère même pas...

  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
    Peux-tu montrer le code du groupe <h:panelGroup id="enfant"> ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ui:repeat value="#{managedBean.enfants}" var="enfant">
    <h:panelGroup id="personne">
        <h:panelGroup id="enfant">
             <h:outputLabel>Nom</h:outputLabel>
    	 <h:inputText id="nomEnfant" value="#{enfant.nom}" />
        </h:panelGroup>
    </h:panelGroup>
    </ui:repeat>
    <h:commandButton id="ajouterEnfant" value="Ajouter" action="#{managedBean.ajouterEnfant}"/>

  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
    C'est assez surprenant, tu ne devrais même pas pouvoir afficher la page, sauf si tu n'as aucun enfant d'enregistré, tu vas avoir des id multiples avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputText id="nomEnfant" value="#{enfant.nom}" />
    dans une boucle...

    Je suppose que les valeurs sont bien transmises au contrôleur mais elles ne sont pas affectée à un objet. Si tu fais l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getParameter("nomEnfant")
    , tu devrais les voir...

    Avec cette bibliothèque de composant je ne sais pas trop quelle est la forme nécessaire pour que ça marche mais ça me rappelle d'anciennes applications struts1 / struts-layout où il fallait générer un nom du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text" name="leBean.laListe[index].nom" ... />
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    tu vas avoir des id multiples
    En fait il rajoute automatiquement des caractères à la fin, ça donne nomEnfant pour le premier id, quand je clique sur ajouter, le second champ a comme id
    Ta proposition est pas mal et tu as raison, mais je n'ai toujours aucune information qui se transmet...
    J'ai essayé de mettre dans le champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ui:repeat value="#{managedBean.enfants}" var="enfant" varStatus="count">
    <h:panelGroup id="personne">
        <h:panelGroup id="enfant">
             <h:outputLabel>Nom</h:outputLabel>
    	 <h:inputText id="nomEnfant" value="#{enfants[count.index].nom}" />
        </h:panelGroup>
    </h:panelGroup>
    </ui:repeat>
    <h:commandButton id="ajouterEnfant" value="Ajouter" action="#{managedBean.ajouterEnfant}"/>
    J'ai essayé de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="#{enfants.get(count.index).nom}"
    Mais ça ne marche toujours pas...

  10. #10
    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
    J'ai fait un petit test pour voir comment fonctionnait ces balises <h> (j'utilise Primefaces) et chez moi, ça fonctionne parfaitement.
    Voici ce que j'ai fait
    Le "manager"
    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
    package test;
     
    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
     
    @ManagedBean(name = "familleManager")
    @SessionScoped
    public class FamilleManager
    {
        private String pere;
        private String mere;
        private List<Enfant> enfants = new ArrayList<Enfant>();
     
        public String getPere()
        {
            return pere;
        }
     
        public void setPere(String pere)
        {
            this.pere = pere;
        }
     
        public String getMere()
        {
            return mere;
        }
     
        public void setMere(String mere)
        {
            this.mere = mere;
        }
     
        public List<Enfant> getEnfants()
        {
            return enfants;
        }
     
        public void setEnfants(List<Enfant> enfants)
        {
            this.enfants = enfants;
        }
     
        public String display()
        {
            return "/test.xhtml?faces-redirect=true";
        }
     
        public String addEnfant()
        {
            enfants.add(new Enfant());
            return display();
        }
     
        public String save()
        {
            System.out.println("Enregistrement de la famille, père : " + getPere() + ", mère : " + getMere());
            if (getEnfants().size() > 0)
            {
                System.out.println("Enfants");
                for (Enfant enfant : getEnfants())
                {
                    System.out.println("   - " + enfant.getNom());
                }
            }
            return display();
        }
    }
    L'objet Enfant
    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
    package test;
     
    public class Enfant
    {
        private String nom;
     
        public String getNom()
        {
            return nom;
        }
     
        public void setNom(String nom)
        {
            this.nom = nom;
        }
    }
    La page (j'utilise un template là, mais tu peux t'en passer en adaptant un peu)
    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
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:p="http://primefaces.org/ui" template="/template/template.xhtml">
     
        <ui:define name="content">
     
        <h:form id="form1">
            <h1>Test</h1>
     
            <h:panelGrid columns="2">
                <h:outputText value="Père"/>
                <h:inputText value="#{familleManager.pere}" />
     
                <h:outputText value="Mère"/>
                <h:inputText value="#{familleManager.mere}" />
            </h:panelGrid>
            <hr />
     
            <h:commandButton action="#{familleManager.save()}" value="Enregistrer"/>
            <h:commandButton action="#{familleManager.addEnfant()}" value="Ajouter"/><br />
     
            <ui:repeat var="enfant" value="#{familleManager.enfants}">
                <h:outputText value="Enfant" />
                <h:inputText value="#{enfant.nom}" /><br />
            </ui:repeat>    
     
        </h:form>
        </ui:define>
    </ui:composition>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Super! ça fonctionne
    Je pense que ça ne fonctionnait pas chez moi parce que je faisais un render sur mon bloc... je ne comprends pas trop pourquoi, mais ça efface toutes mes données.
    Merci pour tes réponses!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/03/2007, 18h21
  2. Partage de blocs mémoire entre 2 processus
    Par rolkA dans le forum Windows
    Réponses: 6
    Dernier message: 18/11/2003, 19h08
  3. Première occurence d'une donnée
    Par bob33 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/06/2003, 13h50
  4. [VB6] mise en commentaire d'un bloc de code
    Par JuanDeLaPlaya dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 15h05
  5. Périphérique de bloc
    Par MAGNUM_HEAD dans le forum Administration système
    Réponses: 4
    Dernier message: 20/03/2003, 19h04

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