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 :

probléme outputtext requete


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut probléme outputtext requete
    Bonjour

    J'ai un probleme sur les outputext. J'ai un formulaire que le client remplie avec les infos qui s'insert dans la BD. J'utilise jsf 2.0 et hibernate avec mysql.

    Mon probleme est que j'ai besoin (du à mes relations entre mes tables), d'utiliser un id de mon membre connecté ( que je récupére avec .

    Voici mon formulaire ou j'aimerais faire quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <h:form>
       <h:panelGrid columns="2" id="editContent">
           <h:inputHidden value=""{reservation.membre.id}">
               <h:inputHidden value="#{user.id}"/>
           </h:inputHidden>
    Le seul code qui fonctionne est avec l'input, mais je ne peux pas l'utiliser car je ne veux pas que le client puisse choisir l'id vu que je souhaite envoyer à ma BD son id au client connecté. Je veux donc que ca soit automatiquement envoyé de façon transparente ou pas.

    Code qui fonctionne ms que je ne peux pas utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h:outputText value="Id du joueur"/>
     <h:inputText value="#{reservation.member.id}"/>
    Si quelqu'un a une solution et veux bien m'aider

    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si j'ai bien compris, tu as besoin d'une valeur, que tu ne peux pas recevoir directement du client car celui-ci pourrait la modifier? Dans ce cas pourquoi ne pas la garder en session?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Merci pour ton aide

    En faite, j'ai besoin de récupérer l'id du membre pour faire ma requete vers une autre table (qui est relier en clé étrangére par cette id).

    En faite je suis obligé d'utiliser cette action car c'est cette classe qui représente mon id de mon membre en session d'authentification.

    Si je l'affiche dans le formulaire dans un outputext, je le vois bien affiché (id=1).

    Je dois donc essayer d'envoyer cette id dans l'action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #{reservation.member.id}
    qui représente ma requete.

    Mais je n'arrive pas à transférer cette valeur (user.id) dans (reservation.member.id), il me dit que la valeur est null lorsque je fait ma requete. Pourtant cela fonctionne avec des input en mettant manuellement un id.

    Pour essayé de répondre à ta question, j'ai créé 2 managed-bean ds le faces-config sur la meêm classe car ca me paraissait plus logique de séparer la gestion de la durée d'authentification en session (user) et les méthodes pour les requetes (member)...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourquoi ton action n'utilise pas directement user.id plutot que d'essayer de faire des choses contre nature en essayer de demander à JSF de transférer une valeur d'un bean à l'autre?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Je n'ai pas le choix (enfin je crois) sauf si il ya un autre moyen côté jsf car ce formulaire me sert pour envoyer une requete à ma table "reservation".
    Dans ma table reservation se trouve un champ "id_membre" qui est la clé étrangére de la table "membre" (donc l'id de ce membre).

    Dans mon formulaire, je suis obligé d'envoyer l'id du membre qui est connecté pour que ma requete vers la table reservation soit effectué.

    Si j'utilise uniquement "{user.id} dans le formulaire, ma requete vers ma table "reservation" ne s'effectuera pas vu que je ne renseigne pas le champ concernant l'id du membre qui pointe vers cette action "#{reservation.membre.id}".

    Pour résumé je dois obligatoirement renseigner (de façon manuelle par le client ou de façon automatique par "user.id" cette value "#{reservation.membre.id}." pour que ma requete s'effectue.

    Pas facile à expliquer

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Ce n'est pas possible de transferer une valeur d'un bean à un autre ?

    Pourquoi cela ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:outputText value="Id du joueur"/>
          <h:inputHidden value="#{reservation.member.id}">
                    <h:outputText value="#{user.id}" />
           </h:inputHidden>
    Dans mon formulaire avec <h:outputText value="#{user.id}" />, il m'affiche bien "1" mais j'obtiens "null" comme valeur.

    Y a t'il une solution pour obtenir la valeur de mon user.id dans reservation.member.id ????????

    Merci de votre aide, c'est vraiment important

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les formulaire JSF utilisent le même value binding pour la lecture et l'écriture de la valeur.

    Maintenant, je ne comprend pas pourquoi tu ne peux pas faire ce transfert simplement dans l'action

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class ReservationAction {
    ....
    public String monAction {
        .....
        getReservation().getMember().setId(getUser().getId());
        ....
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Le probleme (par manque de connaissance surement) est que les outputtext ou inputHidden ne propose pas de mot-clé "action", je ne peux qque utiliser "value".

    Comment pourrais je utiliser action avec les contraintes que je t'ai mis au-dessus selon toi ?

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    l'action, c'est le truc que tu référence dans ton command button, l'opération a effectuer lorsqu'on soumet le formulaire. Sans action, ton formulaire ne sert à rien

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Oula je fatigue je commence à confondre les choses. Je te mets mon code complet : (merci encore)

    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
     
    //Ne fonctionne pas
    <h:outputText value="Id du joueur"/>
        <h:inputHidden value="#{reservation.member.id}">
                   <h:outputText value="#{user.id}" />
    </h:inputHidden>
     
    <h:outputText value="Heure choisie:"/>
            <rich:comboBox value="#{reservation.tranche_heure}">
                      <f:selectItems value="#{reservation.heures}"  />
            </rich:comboBox>
     
    <h:outputText value="Etat:"/>
           <rich:comboBox value="#{reservation.etat}">
                       <f:selectItems value="#{reservation.etats}"  />
           </rich:comboBox>
    <a4j:commandButton value="Valider" action=" {reservation.saveReservation}"/>
    Ma méthode sauvegarder qui appelle dans la couche DAO une requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void saveReservation(){
         ReservationDAO.save(this);
          clear();
       }
    Requet DAO:
    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
     
    public static List<Reservation> list() {
            List<Reservation> courtList = null;
            Session session = HibernateUtil.getSession();
            Transaction tx = null;
            try {
                tx = session.beginTransaction();
                courtList = (List<Reservation>) session.createQuery("from Reservation").list();
                tx.commit();
                if (log.isDebugEnabled()) {
                    log.debug("list: " + courtList.size() + " court(s)");
                }
            } catch (RuntimeException e) {
                if (tx != null) {
                    tx.rollback();
                }
                throw e; // or display error message
            } finally {
                if (session != null) {
                    session.close();
                }
            }
            return courtList;
        }
    Merci pr ton aide

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu retire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:outputText value="Id du joueur"/>
        <h:inputHidden value="#{reservation.member.id}">
                   <h:outputText value="#{user.id}" />
    </h:inputHidden>
    puisqu'il est inutile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String saveReservation(){
        getMember().setId(getUser().getId())
         ReservationDAO.save(this);
          clear();
       }
    Bien sur il faut une propriété de type user dans ton bean reservation, et il faut demander à JSF, via le faces-config.xml de llier cette propriété à #{user}

    (faire une recherche sur les managed properties)

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Merci ca marche parfaitement

    Si je peux abuser j'ai une derniére question.

    Dans mon formulaire j'ai aussi une combobox, j'ai un selectItem qui me propose 3 types (String) de réservation (squash, tennis, badminton).

    Mon souci est que je dois envoyer dans ma requête un id (integer)correspondant à ce type et non un string. Car il est relié encore à la clé étrangére de l'id.

    Comment puis je faire pour que le client choisisse le type avec (squash, tennis et badminton= dc un string) et que je lui fasse comprendre qu'il faut envoyer un integer et non un string à la requete.

    Correspondance entre les string et les integer:
    * 1 = squash
    * 2 = tennis
    * 3 = badminton

    Mon formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <h:outputText value="Type de court:"/>
         <rich:comboBox value="#{reservation.court.numero}"> //doit recevoir un integer
                 <f:selectItems value="#{reservation.types}"/> //représentent des string (squash,tennis,badminton)
         </rich:comboBox>
    <a4j:commandButton value="Valider" action="#{reservation.saveReservation}"/>
    Merci encore

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    quand tu crée tes SelectItem dans reservation.types, tu dois le faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    return new SelectItem[] {
       new SelectItem(Integer.valueOf(1),"squash"),
       new SelectItem(Integer.valueOf(2),"tennis"),
       new SelectItem(Integer.valueOf(3),"badminton")};

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Non je crée une classe d'enum comme cela:

    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
     
    public enum CourtType {
     
        Squash,Tennis,Badminton;
        /**
         * Eléments JSF des types de court.
         */
        public static final SelectItem[] selectItems;
     
        static {
            selectItems = new SelectItem[values().length];
            int index = 0;
            for (CourtType courtType : values()) {
                selectItems[index++] = new SelectItem(courtType, courtType.toString());
            }
        }
    }

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si tu veux récupérer l'enum dans ta value, il faudar alors mettre un converter sur ton selectOneMenu.

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

Discussions similaires

  1. [EJBQL] Problème de requete
    Par rivierem dans le forum Java EE
    Réponses: 3
    Dernier message: 16/10/2004, 10h05
  2. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  3. Problème de Requete...
    Par sebiv dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/04/2004, 16h21
  4. Problème de requete avec Innodb
    Par silef dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2004, 12h54
  5. Problème de requete multis-selections
    Par tripper.dim dans le forum SQL
    Réponses: 9
    Dernier message: 03/09/2003, 13h08

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