Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1948 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Initialiser un Bean avec des champs d'un formulaire.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Initialiser un Bean avec des champs d'un formulaire.

n°1740457
Sbartacus
Posté le 02-06-2008 à 18:27:57  profilanswer
 

Bonjour,
 
J'ai essayé sur un court exemple de faire en sorte qu'un Bean soit instancié automatiquement, avec les champs d'un formulaire, sans avoir à récupérer les champs dans ma servlet. Mais sans succès.
 
Voici ma JSP :
 

Code :
  1. <%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3.   "http://www.w3.org/TR/html4/loose.dtd">
  4.   <jsp:useBean class="client.CC" id="test" scope="session" />
  5.   <jsp:setProperty name="test" property='*' />
  6. <html>
  7.    <head>
  8.        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9.        <title>JSP Page</title>
  10.    </head>
  11.    <body>
  12.        <h2>Hello World!</h2>
  13.        <form name="formulaire" action="DoTest" method="POST">
  14.            <input type="text" name="dd" value="ho" />
  15.            <input type="submit" name="valide" value="VALIDER" />
  16.        </form>
  17.    </body>
  18. </html>


 
 
Voici ma servlet :
 

Code :
  1. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  2.    throws ServletException, IOException {
  3.        response.setContentType("text/html;charset=UTF-8" );
  4.        PrintWriter out = response.getWriter();
  5.        try {
  6.         response.setContentType("text/html" );
  7.         HttpSession session = request.getSession(true);
  8.         out.println("Le dd : " + session.getAttribute("test" ));
  9.        } finally {
  10.            out.close();
  11.        }
  12.    }


 
Voici mon Bean :
 

Code :
  1. public class CC {
  2.    private String dd;
  3.    
  4.    public CC() {
  5.        super();
  6.        
  7.    }
  8.    
  9.    public CC(String dd) {
  10.        super();
  11.        this.dd = dd;
  12.    }
  13.  
  14.    public String getDd() {
  15.        return dd;
  16.    }
  17.  
  18.    public void setDd(String dd) {
  19.        this.dd = dd;
  20.    }
  21. }


 
Même avec cela, je suis obligé de récupérer dans ma servlet les attributs du formulaire, et d'initialiser mon le Bean avec ces attributs.
 
N'y a-t-il donc pas moyen que le Bean soit initialisé avec les champs du formulaire, directement ? :(
 
Merci de votre aide.


Message édité par Sbartacus le 03-06-2008 à 15:19:30
mood
Publicité
Posté le 02-06-2008 à 18:27:57  profilanswer
 

n°1740495
masklinn
í dag viðrar vel til loftárása
Posté le 02-06-2008 à 20:15:12  profilanswer
 

http://commons.apache.org/beanutils/commons-beanutils-1.7.0/docs/api/org/apache/commons/beanutils/BeanUtilsBean.html#populate(java.lang.Object, java.util.Map)


Message édité par masklinn le 02-06-2008 à 20:17:52

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1740507
Sbartacus
Posté le 02-06-2008 à 20:35:01  profilanswer
 

Aïe, les fameux objets properties.  :pt1cable:  
 
Merci j'essaie dès demain.

n°1740675
Sbartacus
Posté le 03-06-2008 à 10:16:03  profilanswer
 

Je bloque un peu : j'ai bien importé la bibli pour la classe BeanUtilsBean. Mais je ne sais pas quoi mettre comme 2nd argument pour la méthode populate().
 
Il est dit que :
[I]properties - Map keyed by property name, with the corresponding (String or String[]) value(s) to be set[/I]
 
Est-ce que ça signifie qu'il faut lui préciser tous les champs à utiliser ?
 
Voici mon bout de code :
 

Code :
  1. BeanUtilsBean bean = new
  2. bean.populate(bean, "test" );


 
Merci.

n°1740727
Bidem
Posté le 03-06-2008 à 11:34:44  profilanswer
 

Utilise request.getParameterMap()
 

n°1740766
Sbartacus
Posté le 03-06-2008 à 12:11:47  profilanswer
 

Merci beaucoup. Je n'ai plus d'erreur à la compilation.
Par contre je n'arrive pas à instancier un nouveau Bean.
 
Voici le code :
 

Code :
  1. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  2.    throws ServletException, IOException {
  3.        response.setContentType("text/html;charset=UTF-8" );
  4.        PrintWriter out = response.getWriter();
  5.        try {
  6.         response.setContentType("text/html" );
  7.         HttpSession session = request.getSession(true);
  8.         BeanUtilsBean bean = new BeanUtilsBean(new ConvertUtilsBean(), new PropertyUtilsBean());
  9.            try {
  10.                bean.populate(bean, request.getParameterMap());
  11.            } catch (IllegalAccessException ex) {
  12.                out.println("IllegalAccessException" );
  13.                Logger.getLogger(DoTest.class.getName()).log(Level.SEVERE, null, ex);
  14.            } catch (InvocationTargetException ex) {
  15.                out.println("InvocationTargetException" );
  16.                Logger.getLogger(DoTest.class.getName()).log(Level.SEVERE, null, ex);
  17.            }
  18.         out.println("Le dd : " + bean.getClass());
  19.        } finally {
  20.            out.close();
  21.        }
  22.    }


 
Cela plante juste après l'instanciation du Bean, donc je ne peux même pas lui faire de setProperty. J'suis tenté d'abandonner, et de continuer à faire des setProperty sur le bean, après avoir récupéré les paramètres 1 par 1.  
Merci pour l'aide en tout cas. :)

n°1740768
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2008 à 12:15:45  profilanswer
 

[:prozac]  
 

Code :
  1. final TonBean bean = new TonBean();
  2. BeanUtils.populate(bean, request.getParameterMap())


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1740781
Sbartacus
Posté le 03-06-2008 à 12:54:07  profilanswer
 

Ah merci, je pensais que l'argument devait obligatoirement être un bean alors que c'est vrai qu'un Object est valide aussi.  :love:  
 
Par contre, autre erreur maintenant, c'est que lorsque je fais :
 

Code :
  1. BeanUtilsBean.populate(bean, request.getParameterMap());


 
Il y a la classique erreur comme quoi une méthode non-static ne peut être utilisée dans un contexte statique. Or, aucune trace de static dans ma servlet. :(
Mais lorsque j'essaie :
 

Code :
  1. new BeanUtilsBean().populate(bean, request.getParameterMap());


Pas d'erreur, mais rien ne s'affiche. Ca bloque aussi à cette ligne.

n°1740787
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2008 à 13:06:54  profilanswer
 

BeanUtils, pas BeanUtilsBean


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1740800
Sbartacus
Posté le 03-06-2008 à 13:30:32  profilanswer
 

Ah autant pour moi, merci.
 
Là par contre, le programme semble s'arrêter au populate. L'exception générée est un ClassNotFoundException.  
 

Code :
  1. protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
  2.         try {
  3.             response.setContentType("text/html;charset=UTF-8" );
  4.             PrintWriter out = response.getWriter();
  5.             response.setContentType("text/html" );
  6.             HttpSession session = request.getSession(true);
  7.             final CC bean = new CC();
  8.             BeanUtils.populate(bean, request.getParameterMap());
  9.         } catch (Exception ex) {
  10.             System.out.println("Exception générée " );
  11.         }
  12.     }


 
Arf, à moins que quelqu'un voie d'où ça vient, j'pense abandonner l'idée. En tout cas merci vous m'aurez déjà bien aidé. :)

mood
Publicité
Posté le 03-06-2008 à 13:30:32  profilanswer
 

n°1740803
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2008 à 13:37:02  profilanswer
 

Citation :

L'exception générée est un ClassNotFoundException.


Ben suffit de mettre la classe qui manque [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1740825
Sbartacus
Posté le 03-06-2008 à 14:06:16  profilanswer
 

Ben à vrai dire, j'ai beau chercher, je ne vois pas quelle classe est-ce.
Ma variable bean est de la classe CC, dans le même package. Pour la variable request, je n'avais jamais eu de problème avec, et j'ai bien mis les import.
 
C'est rageant car j'y suis presque. :(

n°1740861
masklinn
í dag viðrar vel til loftárása
Posté le 03-06-2008 à 14:42:46  profilanswer
 

Non mais une CNFE elle te dit quelle classe manque hein [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1740874
Sbartacus
Posté le 03-06-2008 à 15:18:48  profilanswer
 

Yes ! Ca marche enfin. :D
Chaud quand même la mission pour simplement récupérer tous les paramètres d'un formulaire.
C'était org.apache.commons.logging.LogFactory qui posait problème, il a fallu importer le jar commons-logging trouvé ici :
http://www.apache.org/dist/commons/logging/
 
Maintenant, tout est nickel.  
Merci de ton aide.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] Initialiser un Bean avec des champs d'un formulaire.

 

Sujets relatifs
[Résolu][Perl]faire un match sur une chaîne de caractères '\N'[resolu]différences entre deux fichiers
[resolu]différence entre deux listes perlConseils : optimiser code pour un formulaire JSP
concatenation champs access[RESOLU] Traiter un tableau 2 par 2
[Fini]Aide formulaire qui ne fonctionne pas :/[Résolu] Fil d'Ariane PHP/MySQL sur système d'include
[Résolu] Newbie - requêtes SQL de sélection et boucle 
Plus de sujets relatifs à : [Résolu] Initialiser un Bean avec des champs d'un formulaire.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR