📄 portletcontainerimpl.java
字号:
debugWithName("Redirect URL sent.");
}
/**
* Loads the portlet associated with the specified portlet window.
* @param portletWindow the portlet window.
* @param request the servlet request.
* @param response the servlet response.
* @throws PortletException
* @throws IOException
* @throws PortletContainerException
*/
public void doLoad(PortletWindow portletWindow,
HttpServletRequest request,
HttpServletResponse response)
throws PortletException, IOException, PortletContainerException {
ensureInitialized();
debugWithName("Load request received for portlet: "
+ portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
InternalRenderRequest renderRequest =
getOptionalContainerServices().getPortletEnvironmentService()
.createRenderRequest(this, request, response, portletWindow);
InternalRenderResponse renderResponse =
getOptionalContainerServices().getPortletEnvironmentService()
.createRenderResponse(this, request, response, portletWindow);
PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
try {
getInvocationService().setInvocation(this, portletWindow);
invoker.load(renderRequest, renderResponse, portletWindow);
} finally {
getInvocationService().clearInvocation();
}
debugWithName("Portlet loaded for: " + portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
}
public void doAdmin(PortletWindow portletWindow,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse)
throws PortletException, IOException, PortletContainerException {
ensureInitialized();
debugWithName("Admin request received for portlet: "
+portletWindow.getPortletEntity().getPortletDefinition().getPortletName());
InternalPortletRequest internalRequest =
new AdminRequest(this, portletWindow, servletRequest) { };
InternalPortletResponse internalResponse =
new AdminResponse(this, portletWindow, servletRequest, servletResponse);
PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
try {
getInvocationService().setInvocation(this, portletWindow);
invoker.admin(internalRequest, internalResponse, portletWindow);
} finally {
getInvocationService().clearInvocation();
}
debugWithName("Admin request complete.");
}
public String getName() {
return name;
}
public RequiredContainerServices getRequiredContainerServices() {
return requiredContainerServices;
}
/**
* Retrieve the optional container services used by the container.
* If no implementation was provided during construction, the default
* instance will be returned.
*
* @return services used by the container.
*/
public OptionalContainerServices getOptionalContainerServices() {
return optionalContainerServices;
}
/**
* Fire Event for the portlet associated with the given portlet window and eventName
* @param portletWindow the portlet window.
* @param request the servlet request.
* @param response the servlet response.
* @param eventName the event name
* @throws PortletException
* @throws IOException
* @throws PortletContainerException
*
* @see {@link javax.portlet.EventPortlet#processEvent(javax.portlet.EventRequest, javax.portlet.EventResponse)
*/
public void fireEvent(HttpServletRequest request, HttpServletResponse response,
PortletWindow window, Event event)
throws PortletException, IOException, PortletContainerException {
ensureInitialized();
debugWithName("Event request received for portlet: "
+ window.getPortletEntity().getPortletDefinition().getPortletName());
EventRequestImpl eventRequest = new EventRequestImpl(
this, window, request, event);
EventResponseImpl eventResponse = new EventResponseImpl(
this, window, request, response);
PortletInvokerService invoker = optionalContainerServices.getPortletInvokerService();
try {
getInvocationService().setInvocation(this, window);
FilterManager filterManager = filterInitialisation(window,PortletRequest.EVENT_PHASE);
invoker.event(eventRequest, eventResponse, window, filterManager);
}
finally {
getInvocationService().clearInvocation();
}
debugWithName("Portlet event processed for: "
+ window.getPortletEntity().getPortletDefinition().getPortletName());
// After processing event, change the redirect URL for rendering.
String location = eventResponse.getRedirectLocation();
if (location == null) {
// Create portlet URL provider to encode redirect URL.
debugWithName("No redirect location specified.");
PortletURLProvider redirectURL = requiredContainerServices
.getPortalCallbackService()
.getPortletURLProvider(request, window);
saveChangedParameters(request, eventRequest, eventResponse, redirectURL);
// save redirectURL in request
redirectURL.savePortalURL(request);
}
}
private ContainerInvocationService getInvocationService()
{
return requiredContainerServices.getContainerInvocationService();
}
// Private Methods ---------------------------------------------------------
/**
* Ensures that the portlet container is initialized.
* @throws IllegalStateException if the container is not initialized.
*/
private void ensureInitialized() throws IllegalStateException {
if (!isInitialized()) {
throw new IllegalStateException(
"Portlet container [" + name + "] is not initialized.");
}
}
/**
* Prints a message at DEBUG level with the container name prefix.
* @param message log message.
*/
private void debugWithName(String message) {
if (LOG.isDebugEnabled()) {
LOG.debug("Portlet Container [" + name + "]: " + message);
}
}
/**
* Prints a message at INFO level with the container name prefix.
* @param message log message.
*/
private void infoWithName(String message) {
if (LOG.isInfoEnabled()) {
LOG.info("Portlet Container [" + name + "]: " + message);
}
}
/**
* Prints a message at ERROR level with the container name prefix.
* @param message log message.
*/
private void errorWithName(String message) {
if (LOG.isErrorEnabled()) {
LOG.info("Portlet Container [" + name + "]: " + message);
}
}
/**
* @param request
* @param response
* @param redirectURL
*/
protected void saveChangedParameters(HttpServletRequest servletRequest, PortletRequest request, StateAwareResponseImpl response, PortletURLProvider redirectURL)
{
// Encode portlet mode if it is changed.
if (response.getChangedPortletMode() != null) {
redirectURL.setPortletMode(
response.getChangedPortletMode());
}
// Encode window state if it is changed.
if (response.getChangedWindowState() != null) {
redirectURL.setWindowState(
response.getChangedWindowState());
}
// Encode render parameters retrieved from action response.
Map renderParameters = response.getRenderParameters();
// clear render parameter only once per request
// (there could be more than one (eventing))
if (!isAlreadyCleared(request))
redirectURL.clearParameters();
redirectURL.setParameters(renderParameters);
redirectURL.setPublicRenderParameters(response.getPublicRenderParameter());
// Encode redirect URL as a render URL.
redirectURL.setAction(false);
// Set secure of the redirect URL if necessary.
if (redirectURL.isSecureSupported()) {
try {
redirectURL.setSecure();
} catch (PortletSecurityException e) {
LOG.error("Problem calling PortletURLProvider.setSecure()", e);
throw new IllegalStateException("Security cannot be set on the redirect URL (" + e.toString() + ").");
}
}
}
/**
* Checks if render parameter are already cleared,
* bye storing/reading an ID in the request
*
* @param request the portlet request
*
* @return true, if already cleared
*/
protected boolean isAlreadyCleared(PortletRequest request)
{
String cleared = (String) request.getAttribute(Constants.RENDER_ALREADY_CLEARED);
if (cleared == null || cleared.equals("false")) {
request.setAttribute(Constants.RENDER_ALREADY_CLEARED,"true");
return false;
}
return true;
}
/**
* The method initialise the FilterManager for later use in the PortletServlet
* @param PortletWindow the PortletWindow
* @param lifeCycle like ACTION_PHASE, RENDER_PHASE,...
* @return FilterManager
* @throws PortletContainerException
*/
private FilterManager filterInitialisation(PortletWindow portletWindow,String lifeCycle) throws PortletContainerException{
PortletEntity pe = portletWindow.getPortletEntity();
return requiredContainerServices.getPortalCallbackService().getFilterManager(pe.getPortletDefinition().getApplication(),pe.getPortletDefinition().getPortletName(),lifeCycle);
}
class AdminRequest extends PortletRequestImpl
{
public Integer getRequestMethod()
{
return Constants.METHOD_ADMIN;
}
public AdminRequest(PortletContainer container,
PortletWindow portletWindow,
HttpServletRequest servletRequest) {
super(container, portletWindow, servletRequest);
}
public PortletPreferences getPreferences() {
throw new IllegalStateException("Can not access preferences during admin request.");
}
}
class AdminResponse extends PortletResponseImpl {
public AdminResponse(PortletContainer container,
PortletWindow portletWindow,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
super(container, portletWindow, servletRequest, servletResponse);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -