/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.web.portlet.handler;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
/**
* Interceptor to forward a request parameter from the ActionRequest
to the
* RenderRequest
.
*
*
This can be useful when using {@link ParameterHandlerMapping ParameterHandlerMapping}
* or {@link PortletModeParameterHandlerMapping PortletModeParameterHandlerMapping}.
* It will ensure that the parameter that was used to map the ActionRequest
* to a handler will be forwarded to the RenderRequest
so that it will also be
* mapped the same way.
*
*
When using this Interceptor, you can still change the value of the mapping parameter * in your handler in order to change where the render request will get mapped. * *
Be aware that this Interceptor does call ActionResponse.setRenderParameter
,
* which means that you will not be able to call ActionResponse.sendRedirect
in
* your handler. If you may need to issue a redirect, then you should avoid this Interceptor
* and either write a different one that does this in a different way, or manually forward
* the parameter from within your handler(s).
*
*
Thanks to Rainer Schmitz for suggesting this mapping strategy! * * @author John A. Lewis * @since 2.0 * @see ParameterHandlerMapping * @see PortletModeParameterHandlerMapping */ public class ParameterMappingInterceptor extends HandlerInterceptorAdapter { /** Request parameter name to use for mapping to handlers */ public final static String DEFAULT_PARAMETER_NAME = "action"; private String parameterName = DEFAULT_PARAMETER_NAME; /** * Set the name of the parameter used for mapping. */ public void setParameterName(String parameterName) { this.parameterName = (parameterName != null ? parameterName : DEFAULT_PARAMETER_NAME); } /** * If request is an {@link javax.portlet.ActionRequest ActionRequest}, * get handler mapping parameter and add it to the ActionResponse. */ public boolean preHandleAction(ActionRequest request, ActionResponse response, Object handler) { String mappingParameter = request.getParameter(this.parameterName); if (mappingParameter != null) { response.setRenderParameter(parameterName, mappingParameter); } return true; } }