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

Servlets/JSP Java Discussion :

Impossibilité d'injecter le paramètre d'un formulaire dans un Java Bean


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Impossibilité d'injecter le paramètre d'un formulaire dans un Java Bean
    Bonjour,

    Je tente désespéremment d'injecter automatiquement les paramètres de la requête (champs d'un formulaire) dans un java Bean, au moyen de l'instruction <jsp:setProperty />. Cependant, rien ne fonctionne et le bean est toujours null.

    Mon projet fonctionne sous Glassfish 3.1.1 avec Java EE6 et je crois que les changements à EE 6 ont à voir avec mon problème mais je ne sais comment le résoudre...

    Voici les 4 fichiers illustrant mon problème, réduits à leur plus simple expression...

    1) Une page jsp contenant le formulaire avec un seul champ et les déclaration afin d'y lier la bean usager :

    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <jsp:useBean id="usager" class="entites.Usager" scope="session" />
    <jsp:setProperty name="usager" property="*"/>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Page TEST</title>
        </head>
        <body>
            <h1>Veuillez saisir quelque chose!</h1>
            <p></p>
            <form action="Valider" method="post" >
                <input type="text"  name="champ" value="" size="20" />
                <button type="submit" value="Valider" name="Valider"  >Cliquez ici!</button>
            </form>
        </body>
    </html>
    2) La bean Usager :


    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
    package entites;
     
    import javax.inject.Inject;
     
    public class Usager {
     
        private String champ;
     
        public String getChamp() {return champ;}
     
        public void setChamp(String champ) {
            this.champ = champ;
        }
     
    }

    3) L'extrait de la servlet à qui est transmise le formulaire.

    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
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            HttpSession laSession = request.getSession(true);
            Usager usager = (Usager) laSession.getAttribute("usager");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Servlet Valider</title>");
                out.println("</head>");
                out.println("<body>");
     
                out.println("[Valider] La javaBean «usager» a été récupérée de la session.");
                out.println("<br/>");
                out.println("Champ = " + usager.getChamp());
     
                out.println("</body>");
                out.println("</html>");
            } finally {
                out.close();
            }
        }

    4) Le descripteur de déploiement :

    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"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <servlet>
            <servlet-name>Valider</servlet-name>
            <servlet-class>entites.Valider</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Valider</servlet-name>
            <url-pattern>/Valider</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
    </web-app>
    Lorsque l'on exécute le projet, l'on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Valider] La javaBean «usager» a été récupérée de la session. 
    Champ = null
    Conclusion : le paramètre de la requête n'est pas injecté dans la bean.

    Qu'ai-je oublié pour qu'un projet aussi simple ne fonctionne pas?

    Merci à l'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Points : 178
    Points
    178
    Par défaut
    Pour t'utilises pas un doGet et doPost comme méthode? Et aussi utilises plutot request ou response pour récupérer ton attribut et ou parametre. sinon ajoute un scope session à ton formulaire.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour Ray_Fab,

    Ma servlet contiennent bien sûr les méthodes doGet et doPost puisque c'est obligatoire, mais les deux redirigent la request et la response vers la méthode processRequest (c'est le modèle généré par défaut par Netbeans pour une servlet).

    Pour setter les attributs de mon bean, je pourrais bien sûr aller chercher chaque champ de mon formulaire et de le passer à chaque setter de mon bean mais ça devient vite fastidieux lorsqu'il y a beaucoup de champs. D'où mes tentatives de faire fonctionner l'injection automatique de tous les paramètres de la bean qui ont le même nom que les champs du formulaire par l'utilisation des deux lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <jsp:useBean id="usager" class="entites.Usager" scope="session" />
    <jsp:setProperty name="usager" property="*"/>
    Mais ça ne fonctionne pas et je ne sais pourquoi. Il semble que des annotations ont été introduites dans Java EE 6 et qu'il y en aurait de requises pour ce fonctionnement.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Points : 178
    Points
    178
    Par défaut
    Oui avec Servlet-3.0, tu peux ajouter des paramètres très facilement aavec des annotations. En fait c'est tout à fait normal que t'as ce résultat, t'as 2 html, donc 2 writer différents. Dans ta méthode process...tu crées un writer, et t'as une autre page jsp qui t'envoie des données qui ne sont jamais arrivées la tu les attends. Le plus simple tu vires toute la définition du htlm dans ta méthode process..., tu fais un forward vers ta page jsp, avec 2 3 trucs en plus tu dois arriver eu résultat que tu veux.

Discussions similaires

  1. [MVC] [Spring MVC] recevoir tous les paramètres d'un formulaire dans une liste
    Par judy-brainy dans le forum Spring Web
    Réponses: 1
    Dernier message: 01/05/2016, 23h57
  2. [1.x] Ajout des paramétres d'un formulaire dans un fichier excel
    Par farhaenis dans le forum Symfony
    Réponses: 0
    Dernier message: 02/08/2011, 09h51
  3. Paramétrer connection JBOSS sqlserver dans code java
    Par g25452 dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 19/03/2009, 11h31
  4. Paramètre (nom de formulaire) dans une fonction
    Par Martin_77 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/02/2008, 12h12
  5. Réponses: 3
    Dernier message: 16/01/2006, 11h34

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