Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2004-2005 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.codehaus.groovy.grails.web.metaclass;
 
 
 import  javax.servlet.http.HttpServletRequest;
 import  javax.servlet.http.HttpServletResponse;
 import java.util.Map;
Implements the "redirect" Controller method for action redirection.

Author(s):
Graeme Rocher
Since:
0.2 Created Oct 27, 2005
 
 
     public static final String METHOD_SIGNATURE = "redirect";
     public static final Pattern METHOD_PATTERN = Pattern.compile('^'++'$');
     public static final String GRAILS_VIEWS_ENABLE_JSESSIONID = "grails.views.enable.jsessionid";
 
     public static final String ARGUMENT_ERRORS = "errors";
 
     public static final String ARGUMENT_PERMANENT = "permanent";
 
     private static final Log LOG = LogFactory.getLog(RedirectDynamicMethod.class);
     private static final String BLANK = "";
     private boolean useJessionId = false;
     private LinkGenerator linkGenerator;
 
     public RedirectDynamicMethod(Collection<RedirectEventListenerredirectListeners) {
         super();
         this. = redirectListeners;
     }

    

Deprecated:
Here fore compatibility, will be removed in a future version of Grails
Parameters:
applicationContext The ApplicationContext
 
     @Deprecated
     public RedirectDynamicMethod(ApplicationContext applicationContext) {
         super();
     }
 
     public RedirectDynamicMethod() {
         super();
     }
 
     public void setLinkGenerator(LinkGenerator linkGenerator) {
         this. = linkGenerator;
     }
 
     public void setRedirectListeners(Collection<RedirectEventListenerredirectListeners) {
         this. = redirectListeners;
     }
 
     public void setUseJessionId(boolean useJessionId) {
         this. = useJessionId;
    }
    @SuppressWarnings({"unchecked","rawtypes"})
    @Override
    public Object invoke(Object targetString methodNameObject[] arguments) {
        if (arguments.length == 0) {
            throw new MissingMethodException(,target.getClass(),arguments);
        }
        Map argMap = arguments[0] instanceof Map ? (Map)arguments[0] : .;
        if (argMap.isEmpty()) {
            throw new MissingMethodException(,target.getClass(),arguments);
        }
        GrailsWebRequest webRequest = (GrailsWebRequest)RequestContextHolder.currentRequestAttributes();
        HttpServletRequest request = webRequest.getCurrentRequest();
        HttpServletResponse response = webRequest.getCurrentResponse();
        if(target instanceof GroovyObject) {
            GroovyObject controller = (GroovyObject)target;
            // if there are errors add it to the list of errors
            Errors controllerErrors = (Errors)controller.getProperty(.);
            Errors errors = (Errors)argMap.get();
            if (controllerErrors != null && errors != null) {
                controllerErrors.addAllErrors(errors);
            }
            else {
                controller.setProperty(.errors);
            }
            Object action = argMap.get(.);
            if (action != null) {
                argMap.put(.establishActionName(action,controller));
            }
            if (!argMap.containsKey(.)) {
                // this could be made more efficient if we had a reference to the GrailsControllerClass object, which
                // has the namespace property accessible without needing reflection
                argMap.put(., GrailsClassUtils.getStaticFieldValue(controller.getClass(), .));
            }
        }
        ResponseRedirector redirector = new ResponseRedirector(getLinkGenerator(webRequest));
        redirector.setRedirectListeners();
        redirector.setUseJessionId();
        redirector.redirect(requestresponseargMap);
        return null;
    }
    private LinkGenerator getLinkGenerator(GrailsWebRequest webRequest) {
        if ( == null) {
            ApplicationContext applicationContext = webRequest.getApplicationContext();
            if (applicationContext != null) {
                 = applicationContext.getBean("grailsLinkGenerator"LinkGenerator.class);
            }
        }
        return ;
    }
    /*
     * Figures out the action name from the specified action reference (either a string or closure)
     */
    private String establishActionName(Object actionRefObject target) {
        String actionName = null;
        if (actionRef instanceof String) {
            actionName = (String)actionRef;
        }
        else if (actionRef instanceof CharSequence) {
            actionName = actionRef.toString();
        }
        else if (actionRef instanceof Closure) {
            GrailsUtil.deprecated("Using a closure reference in the 'action' argument of the 'redirect' method is deprecated. Please change to use a String.");
            actionName = GrailsClassUtils.findPropertyNameForValue(targetactionRef);
        }
        return actionName;
    }

    
getter to obtain RequestDataValueProcessor from
        GrailsWebRequest webRequest = (GrailsWebRequest)RequestContextHolder.currentRequestAttributes();
        ApplicationContext applicationContext = webRequest.getApplicationContext();
        if ( == null && applicationContext.containsBean("requestDataValueProcessor")) {
             = applicationContext.getBean("requestDataValueProcessor"RequestDataValueProcessor.class);
        }
        return ;
    }
New to GrepCode? Check out our FAQ X