Je viens de commencer à étudier Spring, et j'essaye de faire une application web. J'ai des éléments d'interface utilisateur communs tels que le pied de page, l'en-tête, la barre latérale et je veux également ajouter des blocs dynamiques, c'est-à-dire des widgets. Les widgets à inclure doivent être choisis dans le code Java, pas dans le modèle JSP.Dynamic inclut dans le modèle JSP
Et c'est là que je suis coincé. Chaque contrôleur retourne propre point de vue est tout - main.jsp
qui comprend des blocs statiques et dynamiques:
<jsp:include page="head.jsp" />
<c:forEach items="${viewList}" var="viewName">
<jsp:include page="${viewName}.jsp" />
</c:forEach>
...
En controleur je passe la liste de vue et de l'objet qui sera utilisé comme widget pour le modèle:
...
views.add(moduleOne.getViewName());
views.add(moduleTwo.getViewName());
model.addAllAttributes(moduleOne.getAttr());
model.addAllAttributes(moduleTwo.getAttr());
model.addAttribute(IModule.VIEW_LIST, views); // passing all views that will be included into main.jsp
...
return "main";
Mais cela ne fonctionne pas parce que quand j'utilise jsp:include page
les paramètres du modèle ne passent pas à includee. Aussi je ne peux pas %@include file=
parce que dans ce cas je ne serai pas capable d'utiliser des variables et je devrais savoir quelle vue passer lors de la compilation.
Bien sûr, s'il n'y a pas de solution, je vais devoir coder toutes les vues possibles widget main.jsp
et basculer entre eux:
switch($i) {
case 1:
include file=widget1.jsp;
break;
case 2:
include file=widget2.jsp;
break;
...
}
Ce qui est évidemment pas flexible.
Ainsi, les questions sont:
- est-il un moyen de résoudre le problème du modèle de passer à inclure des vues sans utiliser
%@include file=
et faire mes widgets de travail? - Existe-t-il une meilleure façon d'implémenter une telle structure de widgets?
Merci beaucoup!
Avez-vous essayé de vider les attributs de la demande dans votre 'JSP's inclus? juste pour vérifier que la * demande incluse * les contient toujours. S'ils sont là, ils sont accessibles. –
@AlonsoDominguez que voulez-vous dire? Par exemple, j'ai défini des classes et d'autres attributs à modéliser, et ils n'étaient disponibles que dans la première vue incluse. D'autres vues ne les ont pas. Est-ce que je vous ai compris? –
Je ne comprends pas pourquoi vous ne pouvez pas utiliser '<% @ include'. Je l'ai fait dans un projet où j'avais besoin de faire un "magicien" qui utilisait une forme mais plusieurs fragments jsp. J'ai juste eu un Enum que j'ai placé dans mon modèle qui a déterminé quel fragment je devrais charger, et a utilisé un 'c: choose' dans le JSP. – CodeChimp