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 :

Persistance JPA dans une page JSF


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Juin 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 48
    Par défaut Persistance JPA dans une page JSF
    Bonjour,

    J'ai une page XHTML contenant un menu déroulant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      <p:selectOneListbox label="equipe" value="#{equipeBean.listeEquipes}" var="eMarque" required="true">  
                                <f:selectItems value="#{equipeBean.listerEquipe()}" itemValue="#{eMarque.idEquipe}"/>  
                                <p:column>#{eMarque.marque}</p:column>
                            </p:selectOneListbox>
    qui me sert à récupérer la marque d'une équipe pour ensuite associer un cycliste à l'équipe que l'utilisateur a sélectionné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public List<Equipe> listerEquipe() {
            if (listeEquipes == null || listeEquipes.isEmpty()) {
                this.listeEquipes = em.createQuery("SELECT e FROM Equipe e").getResultList();
            }
            return listeEquipes;
        }
    Je récupère donc ma liste que je dépile dans mon menu déroulant. Tout cela fonctionne très bien, il m'affiche bien le résultat voulu mais au moment où j'envoie mon formulaire, il m'indique une erreur "null converter".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <p><p:commandButton value="Valider" action="#{cyclisteBean.editerCycliste()}" ajax="false"/></p>
    Le formulaire appelle cette méthode
    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
     public String editerCycliste() {
            try {
                tx.begin();
                em.persist(c);
                c.getEquipe();
                em.persist(e);
                tx.commit();
                this.listeCyclistes = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
            message = new FacesMessage("Un ouveau cycliste a bien été édité");
            FacesContext.getCurrentInstance().addMessage(null, message);
            redirection = "listerCycliste";
            return redirection;
        }
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Juin 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 48
    Par défaut
    pour faire un cour résumé je souhaiterais récupérer depuis ma list box, l'equipe pour pouvoir l'associer ha mon cycliste

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    Bonjour,

    Il y a déjà une erreur dans le <p:selectOneListbox ...>

    L'attribut value doit pointer vers un objet Equipe or ici on affecte listeEquipes qui semble être un ArrayList.

    Pourrait-on aussi avoir la stack trace complète ?

    Cordialement,

  4. #4
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Ton problème vient du fait que tu donnes un objet de type "Equipe" à ton composant.

    En fait tout ça va passer par une interface Converter qui contient 2 méthodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class MyConverter implements Converter {
    public Object getAsObject(FacesContext context, UIComponent component,
                String value) {
        return null;
    }
     
    public String getAsString(FacesContext context, UIComponent component,
                Object value) {
        return null;
    }
    }
    Une va transformer ton objet en String pour pouvoir être affiché à l'écran. Et l'autre qui va faire l'opération l'inverse.

    Dans ton cas, il arrive par miracle à convertir ce que tu lui donnes en String pour l'afficher. Sauf qu'il ne sait pas faire l'opération inverse pour transformer la String en objet de type "Equipe".

    Donc tu as 2 choix,

    Soit tu utilises des SelectItem qui sont fait pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private String selectedItem; // +getter +setter
    private List<SelectItem> selectItems; // +getter
     
    public Bean() {
        selectItems = new ArrayList<SelectItem>();
        for (Equipe equipe : listeEquipe ) {
            selectItems.add( new SelectItem(equipe.getMonId(),  equipe.getNom() ));
        }
    }
     
    <h:selectOneListbox value="#{bean.selectedItem}">
        <f:selectItems value="#{bean.selectItems}" />
    </h:selectOneListbox>
    Soit tu crées un Converter perso qui va se charger de faire la transformation.

  5. #5
    Membre averti
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Juin 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 48
    Par défaut
    Bonjour merci de ta réponse j'ai don adapté mon code comme cela mais sa ne fonctionne toujours pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void menuEquipe() {
            listeEquipe = em.createQuery("SELECT e FROM Equipe e").getResultList();
            selectItems = new ArrayList<SelectItem>();
            for (Equipe equipe : listeEquipe) {
                selectItems.add(new SelectItem(equipe.getMarque(), equipe.getLibelle()));
            }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <p:selectOneListbox label="equipe" value="#{cyclisteBean.selectedItem}" converter="equipe" var="e"  required="true">  
                                <f:selectItems value="#{cyclisteBean.selectItems}" var="equipe"/>
                                <p:column>
                                    <h:outputText value="#{equipe}"/>
                                </p:column>
                            </p:selectOneListbox>

  6. #6
    Membre averti
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Juin 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 48
    Par défaut
    A quoi me sert mon selectedItems sachant qu'il a juste des Get et set et a aucun moment je le remplis

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

Discussions similaires

  1. Integrer un taglib dans une page jsf
    Par Sun03 dans le forum JSF
    Réponses: 23
    Dernier message: 28/04/2008, 11h23
  2. Réponses: 3
    Dernier message: 19/04/2008, 17h32
  3. JfreeChart dans une page jsf
    Par hicham.gi dans le forum JSF
    Réponses: 4
    Dernier message: 10/04/2008, 16h02
  4. "Affichage conditionnel" dans une page JSF
    Par Niniz dans le forum JSF
    Réponses: 2
    Dernier message: 19/07/2007, 12h14
  5. Réponses: 6
    Dernier message: 02/04/2007, 19h13

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