Tôi đang cố gắng tích hợp SiteMesh vào một ứng dụng kế thừa bằng cách sử dụng Tomcat 5 làm vùng chứa của tôi. Tôi có một main.jsp
mà tôi đang trang trí với một trang trí đơn giản.Sử dụng SiteMesh với tiến trình RequestDispatcher()
Trong decorators.xml
, Tôi vừa nhận được một trang trí định nghĩa:
<decorators defaultdir="/decorators">
<decorator name="layout-main" page="layout-main.jsp">
<pattern>/jsp/main.jsp</pattern>
</decorator>
</decorators>
trang trí này hoạt động nếu tôi tự đi đến http://example.com/my-webapp/jsp/main.jsp
. Tuy nhiên, có một vài nơi một servlet, thay vì làm một chuyển hướng đến một jsp, không một forward:
getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Điều này có nghĩa rằng URL duy trì ở một cái gì đó giống như http://example.com/my-webapp/servlet/MyServlet
thay vì file jsp và do đó không được trang trí, tôi đoán vì nó không phù hợp với mẫu trong decorators.xml
.
Tôi không thể làm <pattern>/*</pattern>
vì có các jps khác không cần phải được trang trí bằng layout-main.jsp
. Tôi không thể thực hiện một số <pattern>/servlet/MyServlet*</pattern>
vì MyServlet
có thể chuyển tiếp đến main.jsp
đôi khi và có thể là error.jsp
vào các thời điểm khác.
Có cách nào để giải quyết vấn đề này mà không có thay đổi lớn về cách servlet hoạt động không? Vì đó là một ứng dụng kế thừa, tôi không có nhiều tự do để thay đổi mọi thứ, vì vậy tôi hy vọng một thứ gì đó có cấu hình khôn ngoan sẽ sửa lỗi này.
Tài liệu của SiteMesh thực sự không tuyệt vời như vậy. Tôi đã làm việc chủ yếu từ ứng dụng ví dụ đi kèm với bản phân phối. Tôi thực sự thích SiteMesh, và hy vọng tôi có thể làm cho nó hoạt động trong trường hợp này.
Điều này làm việc, áp dụng bộ lọc cho yêu cầu được chuyển tiếp và do đó áp dụng trình trang trí sitemesh cho trang jsp được chuyển tiếp. Cảm ơn! –
Cảm ơn skaffman, đây chỉ là một trợ giúp rất lớn đối với tôi! –
Tôi đã nhìn thấy những chỉ thị mới nhưng chưa có nhu cầu cho họ. Lời khuyên tuyệt vời. –