Usando SiteMesh com forward () do RequestDispatcher
Estou tentando integrar SiteMesh em um aplicativo herdado usando o Tomcat 5 como meu contêiner. Eu tenho ummain.jsp
que estou decorando com um decorador simple
Emdecorators.xml
, Acabei de definir um decorador:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
Este decorador funciona se eu for manualmente parahttp://example.com/my-webapp/jsp/main.jsp
. No entanto, existem alguns lugares em que um servlet, em vez de redirecionar para um jsp, faz umfrent:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Isso significa que o URL permanece em algo comohttp://example.com/my-webapp/servlet/MyServlet
em vez do arquivo jsp e, portanto, não está sendo decorado, presumo que ele não corresponda ao padrão emdecorators.xml
.
Não posso fazer um<pattern>/*</pattern>
porque existem outros jsps que não precisam ser decorados porlayout-main.jsp
. Eu não posso fazer um<pattern>/servlet/MyServlet*</pattern>
PorqueMyServlet
pode encaminhar paramain.jsp
às vezes e talvezerror.jsp
em outros momentos.
Existe uma maneira de contornar isso sem alterações amplas na forma como os servlets funcionam? Como é um aplicativo legado, não tenho tanta liberdade para mudar as coisas, por isso espero ter algo em termos de configuração que resolva isso.
documentação do @ SiteMesh realmente não é tão boa. Eu tenho trabalhado principalmente com o aplicativo de exemplo que acompanha a distribuição. Gosto muito do SiteMesh e espero que funcione nesse caso.