Próbuję zintegrować SiteMesh w starszej aplikacji, używając Tomcat 5 jako mojego kontenera. Mam main.jsp
, którą dekoruję prostym dekoratorem.Używanie SiteMesh z forwardDispatcher's forward()
W decorators.xml
, Mam tylko jedno dekorator zdefiniowane:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
ten dekorator działa gdybym ręcznie przejść do http://example.com/my-webapp/jsp/main.jsp
. Jednakże, istnieje kilka miejsc, gdzie aplet, zamiast robić przekierowanie do JSP, robi forward:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Oznacza to, że adres URL pozostaje na coś podobnego http://example.com/my-webapp/servlet/MyServlet
zamiast pliku JSP i dlatego nie jest będąc dekorowanym, zakładam, ponieważ nie pasuje do wzoru w decorators.xml
.
Nie mogę wykonać <pattern>/*</pattern>
, ponieważ istnieją inne jsp, które nie muszą być dekorowane przez layout-main.jsp
. Nie mogę wykonać <pattern>/servlet/MyServlet*</pattern>
, ponieważ MyServlet
może czasami przesyłać do main.jsp
i być może error.jsp
.
Czy istnieje sposób obejścia tego problemu bez rozległych zmian w działaniu serwletów? Ponieważ jest to starsza aplikacja, nie mam tyle swobody, aby coś zmienić, więc mam nadzieję na coś, co poprawi konfigurację.
Dokumentacja SiteMesh naprawdę nie jest tak wspaniała. Pracowałem głównie nad przykładową aplikacją dołączoną do dystrybucji. Bardzo podoba mi się SiteMesh i mam nadzieję, że uda mi się go uruchomić w tym przypadku.
To działało, stosując filtr do przesłanego żądania, a tym samym stosując dekorator witryn do przesłanej strony jsp. Dzięki! –
Dzięki skaffman, to była dla mnie OGROMNA pomoc! –
Widziałem te nowe dyrektywy, ale jeszcze ich nie potrzebowałem. Dobra rada. –