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

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

Marsh Posté le 02-06-2008 à 18:27:57    

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
Reply

Marsh Posté le 02-06-2008 à 18:27:57   

Reply

Marsh Posté le 02-06-2008 à 20:15:12    

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
Reply

Marsh Posté le 02-06-2008 à 20:35:01    

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

Reply

Marsh Posté le 03-06-2008 à 10:16:03    

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.

Reply

Marsh Posté le 03-06-2008 à 11:34:44    

Utilise request.getParameterMap()
 

Reply

Marsh Posté le 03-06-2008 à 12:11:47    

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. :)

Reply

Marsh Posté le 03-06-2008 à 12:15:45    

[: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
Reply

Marsh Posté le 03-06-2008 à 12:54:07    

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.

Reply

Marsh Posté le 03-06-2008 à 13:06:54    

BeanUtils, pas BeanUtilsBean


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-06-2008 à 13:30:32    

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é. :)

Reply

Marsh Posté le 03-06-2008 à 13:30:32   

Reply

Marsh Posté le 03-06-2008 à 13:37:02    

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
Reply

Marsh Posté le 03-06-2008 à 14:06:16    

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. :(

Reply

Marsh Posté le 03-06-2008 à 14:42:46    

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
Reply

Marsh Posté le 03-06-2008 à 15:18:48    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed