1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.portlet.servlet;
23
24 import java.io.IOException;
25
26 import javax.portlet.PortletException;
27 import javax.portlet.PortletRequest;
28 import javax.portlet.PortletRequestDispatcher;
29 import javax.portlet.PortletResponse;
30 import javax.portlet.RenderRequest;
31 import javax.portlet.RenderResponse;
32 import javax.servlet.RequestDispatcher;
33 import javax.servlet.ServletException;
34 import javax.servlet.ServletRequest;
35 import javax.servlet.ServletResponse;
36
37 public class PortletServletRequestDispatcher implements RequestDispatcher {
38
39 private PortletRequestDispatcher portletRequestDispatcher;
40
41 public PortletServletRequestDispatcher(PortletRequestDispatcher portletRequestDispatcher) {
42 this.portletRequestDispatcher = portletRequestDispatcher;
43 }
44
45 public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException {
46 throw new IllegalStateException("Not allowed in a portlet");
47
48 }
49
50 public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException {
51 if(request instanceof PortletServletRequest && response instanceof PortletServletResponse) {
52 PortletRequest req = ((PortletServletRequest)request).getPortletRequest();
53 PortletResponse resp = ((PortletServletResponse)response).getPortletResponse();
54 if(req instanceof RenderRequest && resp instanceof RenderResponse) {
55 try {
56 portletRequestDispatcher.include((RenderRequest)req, (RenderResponse)resp);
57 }
58 catch(PortletException e) {
59 throw new ServletException(e);
60 }
61 }
62 else {
63 throw new IllegalStateException("Can only be invoked in the render phase");
64 }
65 }
66 else {
67 throw new IllegalStateException("Can only be invoked in a portlet");
68 }
69 }
70
71 }