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