final String sessionKey = this.sessionKeyPrefix + this.fname;
final PortletSession portletSession = renderRequest.getPortletSession();
IPortletWindowId portletWindowId = (IPortletWindowId)portletSession.getAttribute(sessionKey);
final PortletDelegationDispatcher portletDelegationDispatcher;
final DelegateState delegateState;
//No id in session, create a new dispatcher
if (portletWindowId == null) {
portletDelegationDispatcher = portletDelegationLocator.createRequestDispatcher(renderRequest, this.fname);
portletWindowId = portletDelegationDispatcher.getPortletWindowId();
portletSession.setAttribute(sessionKey, portletWindowId);
final PortletMode portletMode = PortletUtils.getPortletMode(this.portletMode);
final WindowState windowState = PortletUtils.getWindowState(this.windowState);
delegateState = new DelegateState(portletMode, windowState);
}
//id in session, get the old dispatcher
else {
portletDelegationDispatcher = portletDelegationLocator.getRequestDispatcher(renderRequest, portletWindowId);
delegateState = null;
}
final DelegationRequest delegationRequest = new DelegationRequest();
delegationRequest.setDelegateState(delegateState);
//Setup base for portlet URLs
delegationRequest.setParentPortletMode(this.parentUrlMode);
delegationRequest.setParentWindowState(this.parentUrlState);
delegationRequest.setParentParameters(this.parentUrlParameters);
final JspWriter out = this.pageContext.getOut();
try {
portletDelegationDispatcher.doRender(renderRequest, renderResponse, delegationRequest, new JspWriterPortletOutputHandler(out, renderResponse));
}
catch (IOException e) {
throw new JspException("Failed to execute delegate render on portlet '" + this.fname + "'", e);
}