Ich versuche, SiteMesh in eine Legacy-Anwendung mit Tomcat 5 als meine Container zu integrieren. Ich habe eine main.jsp
, die ich mit einem einfachen Dekorateur dekoriere.Verwenden von SiteMesh mit RequestDispatcher forward()
In decorators.xml
, ich habe nur einen Dekorateur definiert habe:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
Dieser Dekorateur funktioniert, wenn ich manuell http://example.com/my-webapp/jsp/main.jsp
gehen. Allerdings gibt es ein paar Orte, wo ein Servlet, anstatt eine Umleitung auf eine jsp zu tun, tut ein forward:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Dies bedeutet, dass die URL an so etwas wie http://example.com/my-webapp/servlet/MyServlet
bleibt statt der jsp-Datei und ist daher nicht dekorieren, nehme ich an, da es nicht das Muster in decorators.xml
entspricht.
Ich kann keine <pattern>/*</pattern>
tun, weil es andere Jsps gibt, die nicht von layout-main.jsp
dekoriert werden müssen. Ich kann kein <pattern>/servlet/MyServlet*</pattern>
tun, weil MyServlet
manchmal zu main.jsp
manchmal und error.jsp
zu anderen Zeiten weiterleiten kann.
Gibt es eine Möglichkeit, dies zu umgehen, ohne dass die Servlets stark verändert werden müssen? Da es sich um eine Legacy-App handelt, habe ich nicht so viel Freiheit, Dinge zu ändern, also hoffe ich auf etwas Konfigurationsmäßiges, das das beheben wird.
Die Dokumentation von SiteMesh ist wirklich nicht so toll. Ich habe hauptsächlich an der Beispielanwendung gearbeitet, die mit der Distribution geliefert wird. Ich mag SiteMesh sehr und hoffe, dass ich es in diesem Fall zum Laufen bringen kann.
Dies funktionierte, indem der Filter auf die weitergeleitete Anfrage angewendet wurde und somit der SiteMesh-Decorator auf die weitergeleitete JSP-Seite angewendet wurde. Vielen Dank! –
Danke skaffman, das war nur eine riesige Hilfe für mich! –
Ich hatte diese neuen Richtlinien gesehen, aber noch keine Notwendigkeit für sie. Guter Rat. –