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

Développement Web en Java Discussion :

Comment récupérer les données d'un formulaire xhtml dans la classe Java beans


Sujet :

Développement Web en Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Comment récupérer les données d'un formulaire xhtml dans la classe Java beans
    Bonjour,

    J'essaie de récupérer les données d'un formulaire .xhtml, et de les mettre ensuite dans les attributs de la classe ManagedBeans, et enfin d'ajouter ces attribue à ma List du ManagedBeans. Et cette list est visualisé dans une autre page xhtml. En fait, j'ai essayé de faire ce tuto :
    http://wwwdi.supelec.fr/hardebolle/t...E_23-forms.php
    Je pense que je n'ai pas bien compris, vu que ça ne marche pas. J'ai comparé avec pleins d'autres tutoriels. J'ai lu la doc, mais je ne vois vraiment pas où est le problème. Je n'ai pas d'erreur de compilation, c'est juste que je n'arrive pas à prendre les données du formulaire pour les mettre dans ma list du beans. Quand je soumets ma requête en appuyant sur le bouton submit, et mes données sont toujours à 0 ou null. Elles n'ont pas pris les entrées du formulaire.
    Voici mon code :
    Dans le formulaire, j'essaye de remplir les champs/attributs id, name et price de la classe myManagedBean grâce au langage EL:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    To change this license header, choose License Headers in Project Properties.
    To change this template file, choose Tools | Templates
    and open the template in the editor.
    -->
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://xmlns.jcp.org/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
        <h:head>
             <link href="style.css" rel="stylesheet" type="text/css" />
            <title>Add Data</title>
            <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
        </h:head>
        <h:body>
            <f:view>
                <h:form>
                    <fieldset>
                        <h:outputLabel for="fieldId" value="id :" />
                        <h:inputText id="fieldId" value="#{myManagedBean.id}" required="true" />
                        <br />
                        <h:outputLabel for="fieldName" value="name : " />
                        <h:inputText id="fieldName" value="#{myManagedBean.name}" required="true" />
                        <br />
                        <h:outputLabel for="fieldPrice" value="price : " />
                        <h:inputText id="fieldPrice" value="#{myManagedBean.price}" required="true" />
                        <br />
                    </fieldset>  
                </h:form>
                <h:form>
                    <h:commandLink action="#{myManagedBean.createData()}">
                        <h:button value="submit"/>
                    </h:commandLink>
                    <h:commandLink action="case3">
                        <h:button value="return"/>
                    </h:commandLink>
                </h:form>
            </f:view>
        </h:body>
    </html>
    Mon ManagedBeans avec tous les accesseurs, getters, etc... Une data est composée d'un id, d'un name et d'un price.
    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
    71
    72
     
    package logic;
     
    import facade.DataFacade;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.ejb.EJB;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import model.Data;
     
    @ManagedBean
    @RequestScoped
    public class MyManagedBean implements Serializable{
        private int id;
        private String name;
        private double price;
        private List<Data> myList;
     
        public MyManagedBean() {
            this.myList = new ArrayList<Data>();
        }
     
        @PostConstruct
        public void myInitMethod(){
            Data d1 = new Data(78,"kibi",5);
            this.myList.add(d1);
            Data d2 = new Data(589,"paçokita",12);
            this.myList.add(d2);
            myList.addAll(datafacade.findAll());
        }
     
        public List<Data> getMyList() {
            return myList;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public void setPrice(double price) {
            this.price = price;
        }
     
        public int getId() {
            return id;
        }
     
        public String getName() {
            return name;
        }
     
        public double getPrice() {
            return price;
        }
     
        public void setMyList(List<Data> myList) {
            this.myList = myList;
        }
     
        public String createData(){
            Data d = new Data(id,name,price);
            myList.add(d);
            return "case4";
        }
    }
    D'après ce que j'ai compris les attribut id, name et price, devrait prendre les valeurs du formulaire, quand la fonction createData() est appelée dans le formulaire.
    Voici les règles de configuration, mais je ne pense pas que le problème vient de là:
    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
     
    <?xml version='1.0' encoding='UTF-8'?>
    <faces-config version="2.2"
                  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
         //il y avait d'autres règles avant, mais n'ont rien avoir
        <navigation-rule>
            <from-view-id>/addData.xhtml</from-view-id>
            <navigation-case>
                <from-outcome>case4</from-outcome>
                <to-view-id>/viewData.xhtml</to-view-id>
                <redirect />
            </navigation-case>
        </navigation-rule>
    </faces-config>
    une idèe ?

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Voila une première idée.

    Tu utilise deux paires de balises <hform> dans ta page .xhtml et donc deux formulaires. Dans le premier, tu as définis les champs et dans le second le bouton de validation. Et du coup, quand tu cliques sur ton bouton "Valider", les données qui sont dans tes champs ne sont pas injectés dans ton ManageBean car elles ne sont pas le formulaire que tu viens de valider. Il faut donc que tu rassemble tes deux formulaire en seul.

    Pour faire cela, rien de plus simple, il suffit que tu supprimes les lignes 31 et 32 du fichier .xhtml et que tu englobe les champs <h:commandLink> dans <fieldset>. Ton formulaire va alors ressembler à ca :
    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
     
    <h:form>
        <fieldset>
            <h:outputLabel for="fieldId" value="id :" />
            <h:inputText id="fieldId" value="#{myManagedBean.id}" required="true" />
            <br />
            <h:outputLabel for="fieldName" value="name : " />
            <h:inputText id="fieldName" value="#{myManagedBean.name}" required="true" />
            <br />
            <h:outputLabel for="fieldPrice" value="price : " />
            <h:inputText id="fieldPrice" value="#{myManagedBean.price}" required="true" />
            <br />
     
     
            <h:commandLink action="#{myManagedBean.createData()}">
                <h:button value="submit"/>
            </h:commandLink>
            <h:commandLink action="case3">
                <h:button value="return"/>
            </h:commandLink>
        </fieldset>  
    </h:form>

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    A merci pour ces précisions sur h:form. Mais çà n'a pas résolu le problème, il doit y avoir autre chose.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Lors de la compilation, j'ai un warning. Peut-être que le problème vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    warning: Supported source version 'RELEASE_6' from annotation processor 'org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor' less than -source '1.7'
    Note: Creating static metadata factory ...
    Note: Optional file was not found: META-INF/orm.xml continuing with generation.
    Note: Optional file was not found: META-INF/eclipselink-orm.xml continuing with generation.
    Note: Optional file was not found: META-INF/orm.xml continuing with generation.
    Note: Optional file was not found: META-INF/eclipselink-orm.xml continuing with generation.
    Note: /home/anna/NetBeansProjects/TransferData/src/java/facade/AbstractFacade.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Alors une deuxième idée :

    Est ce que tu es redirigée vers ls page /viewData.xhtml après la validation du formulaire ? Parce que si c'est le cas, cela signifie que tu passe bien par la méthode createData() et que donc le problème pourrait être lié à la persistance des données plutôt qu'au formulaire.

    D'où ma question, comment est ce que tu fais persister tes données ? Est ce que tu stockes dans une base de donnée ? Un fichier ? Et qu'est ce qu'il se passe dans ta page viewData.xhtml ? Comment est ce que tu récupères les données que tu veux afficher ?


    Sur un sujet un peu différent, je te conseille de mettre en place un système de log (regarde log4j) et de logger un peu (voire beaucoup) où ton programme passe. Ca te permettra de voir un peu mieux ce qu'il se passe.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    En enlevant les <redirect /> dans les règles de navigation, en effet la ligne des données ajoutées apparaît. . Il y a donc un problème de persistance des données, car si je veux sauvegarder mes nouvelles données dans ma database grace au "datafacade.create(d);", il y a une erreur.
    javax.ejb.EJBException: Transaction aborted.

    Je vais faire un nouveau post alors.

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Je vais faire un nouveau post alors.
    dans ce cas met le dans le bon Forum, par exemple Développement Web en Java.

    PS : je déplace cette discussion.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2014, 12h14
  2. Récupérer les données d'un formulaire inclu dans un tableau
    Par Nico87 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/06/2009, 12h07
  3. Comment récupérer les données de mon formulaire?
    Par kaselander dans le forum Langage
    Réponses: 27
    Dernier message: 02/03/2009, 16h03
  4. Réponses: 4
    Dernier message: 12/01/2009, 09h25
  5. Réponses: 1
    Dernier message: 18/02/2008, 17h17

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