Je tente d'intégrer SiteMesh dans une application héritée en utilisant Tomcat 5 comme conteneur. J'ai un main.jsp
que je décore avec un décorateur simple.Utilisation de SiteMesh avec forwardD() de RequestDispatcher()
En decorators.xml
, je viens de recevoir un décorateur défini:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
Ce décorateur fonctionne si je vais manuellement http://example.com/my-webapp/jsp/main.jsp
. Cependant, il y a quelques endroits où un servlet, au lieu de faire une redirection vers un jsp, fait un forward:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Cela signifie que l'URL reste quelque chose comme http://example.com/my-webapp/servlet/MyServlet
au lieu du fichier jsp et est donc pas étant décoré, je présume qu'il ne correspond pas au modèle decorators.xml
.
Je ne peux pas faire un <pattern>/*</pattern>
parce qu'il y a d'autres jsps qui n'ont pas besoin d'être décorés par layout-main.jsp
. Je ne peux pas faire un <pattern>/servlet/MyServlet*</pattern>
parce que MyServlet
peut transmettre à main.jsp
parfois et peut-être error.jsp
à d'autres moments.
Existe-t-il un moyen de contourner ce problème sans modifications importantes du fonctionnement des servlets? Comme il s'agit d'une application héritée, je n'ai pas autant de liberté pour changer les choses, alors j'espère que quelque chose dans la configuration corrigera cela.
La documentation de SiteMesh n'est vraiment pas géniale. J'ai principalement travaillé sur l'exemple d'application fourni avec la distribution. J'aime beaucoup SiteMesh, et j'espère pouvoir le faire fonctionner dans ce cas.
Cela a fonctionné, en appliquant le filtre à la demande transmise et en appliquant ainsi le décorateur sitemesh à la page jsp transmise. Merci! –
Merci skaffman, c'était juste une aide énorme pour moi! –
J'avais vu ces nouvelles directives mais je n'avais pas encore besoin d'elles. Très bon conseil. –