-
Portée d'un Bean
Bonsoir,
Dans une page accueil.jsp, je crée un bean avec le code :
Code:
<jsp:useBean id="commande" class="com.commande" scope="session" />
En cliquant, sur un bouton de cette page, j'arrive sur une deuxième page jsp mais quand j'appelle une fonction de commande avec le code ci dessous, le bean commande est inconnu. Pourtant, ma portée est session.
Code:
float total = commande.montant()
Pouvez-vous m'aider ?
Merci
-
Tu as bien mis le tag <jsp:useBean> dans la deuxième page également ?
-
Non. Le problème doit venir de là.
Je dois donc dans la deuxième page écrire aussi :
Code:
<jsp:useBean id="commande" class="com.commande" scope="session" />
-
-
Merci.
Je comprends mieux l'utilité de "scope". En fait, si on a scope="page" alors un nouveau bean sera recréé dans chaque page alors que là avec scope="session" on réutilise le bean créé auparavant.
Est-ce bien çà ?
-
A vrai dire le "scope" n'est rien d'autre que la précision de "l'endroit" où sera stocké l'objet. Donc, on a :
- page (lié à la page)
- request (lié au request, visible uniquement pour l'utilisateur, plus d'existance une fois la réponse envoyée au client)
- session (lié à la session, visible uniquement pour l'utilisateur, existe tant que sa session http est active)
- application (lié au conteneur de servlet pour l'application, tous les utilisateurs de l'application y ont accès)
Au niveau du tag <jsp:useBean>, il y a une particularité également.
Si tu utilises l'attribut "class", l'objet est instancié par son constructeur sans argument et placé dans le scope.
Avec l'attribut "type", l'objet doit exister dans le scope mais on n'a pas besoin d'un constructeur sans argument.
-
J'ai compris sauf ta remarque sur la particularité au niveau du tag <jsp:useBean>. Peux-tu me donner un exemple pour lequel on utilise type et pas class s'il te plaît ?
Merci
-
J'utilise systématiquement "type", les objets de mes pages étant instanciés par le contrôleur, modèle MVC oblige...
Je ne laisse pas un appel de page créer des objets...
Bon, utiliser "class" ne veut pas dire qu'on est "out" pour autant... tout dépend de la philosophie ;)
-
Autant suivre le modèle MVC mais je débute.
Si tu as un bon livre pour suivre les bonnes pratiques, je suis preneur.
En tout cas, merci pour ton aide.
-
Je n'ai pas de livre à te conseiller...
Pour les bonnes pratiques, le plus simple est de résonner en couches :
1 pour stoker les données dont tu as besoin pour l'affichage -> bean (Modèle)
1 pour mettre en forme les données -> jsp (Vue)
1 pour faire le lien entre les 2 premières -> servlet (Contrôleur)
Chaque couche ne s'occupant que de ce qui la regarde...
Ensuite, on peut ajouter certains éléments comme une couche d'accès aux données (dao) qui sera majoritairement utilisée par le contrôleur mais qui pourrait accessoirement être utilisée par le modèle (données d'initialisation pour des combo-box par exemple)
Au niveau de la vue, le plus simple est de mettre le code html de base et d'utiliser les scriptlet (<%= ... %>) pour incorporer les valeurs dynamiques.
Il est évidement plus productif de passer par des taglib ou de développer ses propres composants (très simple, très efficace)
Dans tous les cas, le seul rôle de la vue est de mettre en forme la page html qui sera retournée au client.
Tu peux t'intéresser à certains framework comme struts ou jsf qui te faciliteront (à terme) les développements... (il y a un temps d'apprentissage)
-
Je vais mis mettre :D.
Merci