package org.apache.struts2.portlet.dispatcher; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; import org.apache.struts2.portlet.servlet.PortletServletResponse; import org.apache.struts2.portlet.servlet.PortletServletResponseJSR286; import javax.portlet.*; import java.io.IOException; import static org.apache.struts2.portlet.PortletConstants.EVENT_PHASE; import static org.apache.struts2.portlet.PortletConstants.SERVE_RESOURCE_PHASE; public class Jsr286Dispatcher extends Jsr168Dispatcher { private final static Logger LOG = LoggerFactory.getLogger(Jsr286Dispatcher.class); @Override public void processEvent( EventRequest request, EventResponse response) throws PortletException, IOException { if (LOG.isDebugEnabled()) LOG.debug("Entering processEvent"); resetActionContext(); try { // We'll use the event name as the "action" serviceAction(request, response, getRequestMap(request), getParameterMap(request), getSessionMap(request), getApplicationMap(), portletNamespace, EVENT_PHASE); if (LOG.isDebugEnabled()) LOG.debug("Leaving processEvent"); } finally { ActionContext.setContext(null); } } @Override public void serveResource( ResourceRequest request, ResourceResponse response) throws PortletException, IOException { if (LOG.isDebugEnabled()) LOG.debug("Entering serveResource"); resetActionContext(); try { serviceAction(request, response, getRequestMap(request), getParameterMap(request), getSessionMap(request), getApplicationMap(), portletNamespace, SERVE_RESOURCE_PHASE); } finally { ActionContext.setContext(null); } } @Override protected String getDefaultActionPath( PortletRequest portletRequest ) { if (portletRequest instanceof EventRequest) { return ((EventRequest) portletRequest).getEvent().getName(); } return super.getDefaultActionPath(portletRequest); } @Override protected PortletServletResponse createPortletServletResponse( PortletResponse response ) { return new PortletServletResponseJSR286(response); } }