estoy tratando de integrar SiteMesh en una aplicación heredada utilizando Tomcat 5 como mi un recipiente. Tengo un main.jsp
que estoy decorando con un simple decorador.SiteMesh con el delantero de RequestDispatcher()
En decorators.xml
, sólo tengo un decorador definido:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
Este decorador funciona si voy a http://example.com/my-webapp/jsp/main.jsp
manualmente. Sin embargo, hay algunos lugares en los que un servlet, en lugar de hacer una redirección a una página JSP, hace un forward:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Esto significa que la URL se mantiene en algo así como http://example.com/my-webapp/servlet/MyServlet
en lugar del archivo JSP y por lo tanto no es estoy decorado, supongo que ya que no coincide con el patrón en decorators.xml
.
No puedo hacer un <pattern>/*</pattern>
porque hay otros jsps que no necesitan ser decorados por layout-main.jsp
. No puedo hacer un <pattern>/servlet/MyServlet*</pattern>
porque MyServlet
puede reenviar a main.jsp
a veces y quizás error.jsp
en otros momentos.
¿Hay una manera de solucionar esto sin cambios expansivos a cómo funcionan los servlets? Dado que es una aplicación heredada, no tengo tanta libertad para cambiar las cosas, así que espero algo de configuración que solucione esto. documentación
de SiteMesh realmente no es tan grande. He estado trabajando principalmente fuera de la aplicación de ejemplo que viene con la distribución. Realmente me gusta SiteMesh, y espero poder hacerlo funcionar en este caso.
Esto funcionó, aplicar el filtro a la solicitud enviada y aplicando así el decorador SiteMesh a la página JSP reenviado. ¡Gracias! –
Gracias skaffman, ¡esto fue solo una ENORME ayuda para mí! –
Había visto esas nuevas directivas pero todavía no las necesitaba. Buen consejo. –