private void _doRender(HttpServletRequest request, HttpServletResponse response, Portlet portlet) throws Exception { if ((portlet != null) && portlet.isInstanceable() && !portlet.isAddDefaultResource()) { String instanceId = portlet.getInstanceId(); if (!Validator.isPassword(instanceId)) { if (_log.isDebugEnabled()) { _log.debug( "Portlet " + portlet.getPortletId() + " is instanceable but does not have a valid " + "instance id"); } portlet = null; } } if (portlet == null) { return; } // Capture the current portlet's settings to reset them once the child // portlet is rendered ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); PortletDisplay portletDisplayClone = PortletDisplayFactory.create(); portletDisplay.copyTo(portletDisplayClone); PortletConfig portletConfig = (PortletConfig) request.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG); PortletRequest portletRequest = (PortletRequest) request.getAttribute(JavaConstants.JAVAX_PORTLET_REQUEST); if (!(portletRequest instanceof RenderRequest)) { portletRequest = null; } PortletResponse portletResponse = (PortletResponse) request.getAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE); if (!(portletResponse instanceof RenderResponse)) { portletResponse = null; } String lifecycle = (String) request.getAttribute(PortletRequest.LIFECYCLE_PHASE); request.setAttribute(WebKeys.RENDER_PORTLET, portlet); String path = (String) request.getAttribute(WebKeys.RENDER_PATH); if (path == null) { path = "/html/portal/render_portlet.jsp"; } RequestDispatcher requestDispatcher = DirectRequestDispatcherFactoryUtil.getRequestDispatcher(request, path); BufferCacheServletResponse bufferCacheServletResponse = null; boolean writeOutput = false; if (response instanceof BufferCacheServletResponse) { bufferCacheServletResponse = (BufferCacheServletResponse) response; } else { writeOutput = true; bufferCacheServletResponse = new BufferCacheServletResponse(response); } try { requestDispatcher.include(request, bufferCacheServletResponse); Boolean portletConfiguratorVisibility = (Boolean) request.getAttribute(WebKeys.PORTLET_CONFIGURATOR_VISIBILITY); if (portletConfiguratorVisibility != null) { request.removeAttribute(WebKeys.PORTLET_CONFIGURATOR_VISIBILITY); Layout layout = themeDisplay.getLayout(); if (!layout.isTypeControlPanel() && !LayoutPermissionUtil.contains( themeDisplay.getPermissionChecker(), layout, ActionKeys.UPDATE) && !PortletPermissionUtil.contains( themeDisplay.getPermissionChecker(), layout, portlet.getPortletId(), ActionKeys.CONFIGURATION)) { bufferCacheServletResponse.setCharBuffer(null); return; } } if (writeOutput) { Writer writer = response.getWriter(); writer.write(bufferCacheServletResponse.getString()); } } finally { portletDisplay.copyFrom(portletDisplayClone); portletDisplayClone.recycle(); if (portletConfig != null) { request.setAttribute(JavaConstants.JAVAX_PORTLET_CONFIG, portletConfig); } if (portletRequest != null) { request.setAttribute(JavaConstants.JAVAX_PORTLET_REQUEST, portletRequest); } if (portletResponse != null) { request.setAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE, portletResponse); } if (lifecycle != null) { request.setAttribute(PortletRequest.LIFECYCLE_PHASE, lifecycle); } request.removeAttribute(WebKeys.RENDER_PORTLET); } }