Я пытаюсь интегрировать SiteMesh в устаревшее приложение, используя Tomcat 5 в качестве моего контейнера. У меня есть main.jsp
, который я украшаю простым декоратором.Использование SiteMesh с ForwardDispatcher forward()
В decorators.xml
, я только что получил один декоратор, определенный:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
Этот декоратор работает, если я вручную перейти к http://example.com/my-webapp/jsp/main.jsp
. Тем не менее, есть несколько мест, где сервлет, вместо того, чтобы делать переадресацию на JSP, делает forward:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Это означает, что URL остается на что-то вроде http://example.com/my-webapp/servlet/MyServlet
вместо файла JSP и поэтому не будучи украшенным, я полагаю, поскольку он не соответствует шаблону в decorators.xml
.
Я не могу сделать <pattern>/*</pattern>
, потому что есть другие jsps, которые не должны быть украшены layout-main.jsp
. Я не могу сделать <pattern>/servlet/MyServlet*</pattern>
, потому что MyServlet
может пересылать main.jsp
иногда и, возможно, error.jsp
в другое время.
Есть ли способ обойти это без обширных изменений в работе сервлетов? Поскольку это устаревшее приложение, у меня не так много свободы, чтобы изменить ситуацию, поэтому я надеюсь на что-то конфигурирующее, которое исправит это.
Документация SiteMesh действительно не так уж велика. Я работал в основном с примера приложения, которое поставляется с дистрибутивом. Мне очень нравится SiteMesh, и я надеюсь, что смогу заставить его работать в этом случае.
Это сработало, применяя фильтр к пересылаемому запросу и тем самым применяя декоратор sitemesh к пересылаемой странице jsp. Благодаря! –
Спасибо, скаффман, это была просто ОГРОМНАЯ помощь мне! –
Я видел эти новые директивы, но еще не нуждался в них. Отличный совет. –