2009-05-12 15 views
3

J'ai une application JSP Struts qui utilise Spring pour s'intégrer aux services/dao/database. Fondamentalement, struts utilise spring pour obtenir les données de la base de données, il construit le formulaire et les transmet aux fichiers JSP.La meilleure façon d'afficher le nom complet de l'utilisateur dans un fichier d'en-tête JSP avec un cadre à ressort/entretoises?

J'ai un fichier d'en-tête qui est injecté dans chaque fichier JSP en utilisant des tuiles. Je voudrais montrer "Bienvenue John Doe" sur chaque page à l'intérieur de l'en-tête. Où "John Doe" est le nom de l'utilisateur actuellement connecté.

Quelle serait la meilleure approche pour le faire? La solution à laquelle je peux penser est:

  1. Utilisez un filtre de ressort pour attraper la requête http. Chargez l'utilisateur à partir de la base de données en utilisant un cookie contenant l'ID utilisateur (*) et placez le nom dans un bean de session nommé "CurrentUser"

  2. Dans "header.jsp", obtenez le contexte de l'application printanière. En l'utilisant, chargez le bean "CurrentUser" et obtenez le nom. Mettez le nom dans le code HTML.

Je pense que je pourrais obtenir ce travail. Mais je ne suis pas certain que ce soit la meilleure façon de le faire. Une pensée sur mon approche?


(*) Bien sûr, le cookie sera chiffré

Répondre

1

Bien qu'il peut être un marteau extrêmement important pour votre cas d'utilisation assez simple, nous avons obtenu une intégration printemps-jsp vraiment bien (jsp 2.1 requis!) En utilisant ELResolver. En suivant this tutorial vous pouvez essentiellement injecter un bean géré de printemps dans votre el contexte et lui permettre d'accéder à l'aide jsp-el comme ceci:

$ {} spring.mybean.myproperty

Vous pouvez choisir d'injecter beans prédéfinis dans votre el-context ou simplement passer "mybean" à getBean et permettre à presque tout ce qui est géré par le printemps d'être accessible depuis jsp. mybean pourrait facilement être un haricot de printemps à portée de session.

Je ne suis pas totalement sûr de savoir comment cela s'alignerait avec les carreaux, cependant.

+0

Tutoriel est rompu lien maintenant. – cletus

0

N'êtes-vous pas déjà une sorte de stockage User objet en session?

Si c'est le cas, je voudrais simplement ajouter une méthode "getFullName()" à cet objet de domaine et le DAO le remplir lorsqu'il le renvoie. Idéalement, vous devez remplir l'objet User lorsque l'utilisateur se connecte, le stocker en session et ne pas avoir besoin de charger à nouveau toutes les informations de l'utilisateur à partir de la base de données sur chaque demande de page.

(N'êtes-vous pas en utilisant Spring Security? Dans ce cas, ils fournissent un moyen assez simple pour stocker un objet UserDetails -comme en session, et un accès facile à elle.)

Je voterais contre les deux de votre approches parce que

  1. Cela signifie (au moins) un appel de base de données supplémentaire par demande de page
  2. Cela ne fonctionnerait pas si d'autres utilisateurs ont partagé le même haricot dans le même contexte. En outre, vous ne devriez pas avoir de fichiers JSP (qui sont votre couche de présentation) interagissant directement avec les services de données.
+0

Mon approche ne ferait pas une demande de base de données à chaque fois. Je remplirais un bean session en utilisant un filtre. Les haricots de session sont gérés au printemps et sont attachés à la session. –