Regardez la fin du post, il concerne la consultation d'un javabean à partir d'une servlet java.
Regardez la fin du post, il concerne la consultation d'un javabean à partir d'une servlet java.
En fait tu te trompes
dans ta jsp tu mets comme id: id_bean
Et dans ta servlet tu recherche l'attribut : idbean
Donc tu te ramasses un NullPointerException
Bonne chance
Non non non, le problème viens pas de la syntaxe, j'ai créé rapidement cet exemple pour la demonstration.
Mon problème c'est surtout comment faire pour appeler un bean à partir d'une classe java?
Comment récupérer les valeurs qui ont été instanciées.?
Dans ma classe (ClassX) j'ai essayé de créer une instance de TestServlet
ex :
TestServlet ObjTest = new TestServlet;
this.nomclassx = ObjTest.nom;
je peux actuellement récupérer les valeurs de mes javabeans dans toutes mes pages JSP grace à la portée SESSION.
Mais c'est dans une classe indépendante que je souhaite récupérer la valeur d'une propriété de mon bean. comment faire ? suis je sur la bonne piste ?
Merci quand même.
Pourquoi tu n'instancies pas ta classe java dans la servlet en lui passant ton bean
exemple dans la servlet
et dans le constructeur de ta classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part TaClasse taClasse = new TaClasse(tonBean);
Ensuite si tu souhaites utiliser cette classe tout au long de la session tu l'ajoutes en attribute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private TonBean bean; public TaClasse(TonBean bean) { this.bean = bean; }
Ou alors tu dois passer par un singleton au niveau session et non au niveau VM. Mais là tu m'en demande de trop car je ne sais pas comment implémenter ce genre de design.
Code : Sélectionner tout - Visualiser dans une fenêtre à part session.setAttribute("taClasse",taClasse);
...
Saurais-tu séparer ton code car cela me parait brouillon.
Montre moi tes jsp, servlets, beans et classes java complètes séparément.
ok je te prépare ça.
javabean : dossier
javabean : maclasse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <jsp:useBean id="dossier" type="com.Dossier" scope="session" class="com.Dossier"> </jsp:useBean>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <jsp:useBean id="maclasse" type="com.MaClasse" scope="session" class="com.MaClasse"> </jsp:useBean>
La classe Dossier (code non exhaustif) : elle respecte la syntaxe javabean
(get, set, is)
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 public class Dossier implements Serializable { private int dos_id; private String dos_nom; private String dos_prenom; //Constructeur de la classe dossier. public Dossier (){ } //Accesseurs. public int getDos_id () { return this.dos_id; } public String getDos_nom() { return this.dos_nom; } public String getDos_prenom() { return this.dos_prenom; } //Mutateurs. public void setDos_id (int dos_id) { this.dos_id = dos_id; } public void setDos_nom(String dos_nom) { if(dos_nom!=null && dos_nom!="") this.dos_nom = dos_nom; } }
MaClasse respecte aussi la syntaxe javabeans elle est dans le même package que Dossier.
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 public class MaClasse { private String nom; private String nom2="titi"; //constructeur MaClasse(Dossier monbean) { this.nom = monbean.getNom(); } public String getNom() { return this.nom; } //ici je souhaite comparer le nom du dossier en cours et celui de MaClasse public void Comparaison_nom(nom1, nom2) { .... } ... }
C'est à partir de cette servlet que je souhaite récupérer l'instance en cours de mon bean dossier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package com.modules.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession session = req.getSession(); com.Dossier myBean = (com.Dossier) session.getAttribute("dossier"); MaClasse ObjClass = new MaClasse(myBean); } }
Cette page inclue les javabeans
Instancie la classe dossier et associe à la propriété nom = toto
L'affichage de la propriété nom de MaClasse est ici nécéssaire uniquement pour le test.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <%@ include file="bean/dossier.jsp" %> <%@ include file="bean/maclasse.jsp" %> //Création du dossier. dossier.setDos_nom("toto"); //Appel de la servlet new TestServlet(); //Afficher la propriété nom de MaClasse out.println("<hr>"); out.println(maclasse.getNom()); out.println("<hr>");
Je devrais logiquement avoir à l'affichage "toto" non? Je reste perplexe
Je comprends pas très ta manière de travailler.
Tu instancies une classe dans ta jsp et ensuite tu la réinstancies dans ta servlet.
Deuxièmement, je comprends pas pourquoi tu souhaites comparer deux classes. :
Vu que le bean est propre à la session je n'en vois pas l'interêt
Voilà ce que moi je propose
Tu crées un jsp avec un form que tu soumets à ta servlet. J'écris le code approximativement, cela se peut qu'il y ait des erreurs.
Ensuite tu récupères le bean dans ta servlet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <jsp:useBean id="dossier" type="com.Dossier" scope="session" class="com.Dossier"> </jsp:useBean> <form method="POST" action="<%=response.encodeRedirectURL("taServlet")%>"> <input type="submit" value="submit"> </form>
Et ensuite tu peux réafficher ce que tu veux dans ta deuxième jsp
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 package com.modules.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) { HttpSession session = requset.getSession(); com.Dossier myBean = (com.Dossier) session.getAttribute("dossier"); MaClasse ObjClass = new MaClasse(myBean); } }
Voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <jsp:useBean id="dossier" type="com.Dossier" scope="session" class="com.Dossier"/> <jsp:getProperty name="dossier" property="dos_nom"/>
Je ne suis pas sur .. lorsque tu intancie ta servlet ... ta methode service() de TestServlet() n'est pas appelé... donc ta classe maClasse n'est pas initialisé avec ton bean Dossier...Envoyé par jmeclipse
Pour verifier met une trace dans le constructeur de ta classe maClasse ..
@+
Fabszn
Twitter : @fsznajderman
N'oubliez pas le bouton
Comment bien poser ses questions sur le forum
En effet, petite erreur de compréhension du modèle des Servlet, seul le container web peu instancier un servlet et le mettre à disposition.
On n'accède jamais à un servlet par une référence mais par une URL.
Clic me...
CV en ligne
Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...
Pas de réponse en MP...Merci
Ah oui en effet j'avais pas remarqué cette erreurEnvoyé par Alwin
Tu as raison le bean représente ma session.
A force de chercher une solution, j'ai dévié de mon objectif premier : utiliser dans le traitement d'une classe la propriété d'un javabean.
Je souhaite interroger le bean à partir de ma classe MaClasse; cela n'est possible apparament qu'au travers une servlet. C'est pour ça que j'essaye desepérement d'utiliser une servlet pour arriver à mes fins.
Et tu as raison sur "seul le container web peu instancier un servlet et le mettre à disposition"
Alors que faire ? comment appeler cette servlet?
C'est bien ce qui me semblait..Envoyé par Alwin
@+
Fabszn
Twitter : @fsznajderman
N'oubliez pas le bouton
Comment bien poser ses questions sur le forum
Il est donc impossible de récupérer la valeur d'un javabean dans le code d'une classe?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager