protected void copyParamsFromPreviousRequest(
     GrailsWebRequest previousRequestAttributes, GrailsWebRequest requestAttributes) {
   Map previousParams = previousRequestAttributes.getParams();
   Map params = requestAttributes.getParams();
   for (Iterator i = previousParams.keySet().iterator(); i.hasNext(); ) {
     String name = (String) i.next();
     params.put(name, previousParams.get(name));
   }
 }
  protected Object findArg(HttpServletRequest request, Class<?> type, String name) {

    if (String.class.equals(type)) {
      return request.getParameter(name);
    }

    if (PRIMITIVE_CLASSES.contains(type) || TYPE_TO_CONVERSION_METHOD_NAME.containsKey(type)) {

      String conversionMethodName;
      if (TYPE_TO_CONVERSION_METHOD_NAME.containsKey(type)) {
        conversionMethodName = TYPE_TO_CONVERSION_METHOD_NAME.get(type);
      } else {
        conversionMethodName = type.getName();
      }

      GrailsWebRequest grailsRequest =
          (GrailsWebRequest) RequestContextHolder.getRequestAttributes();
      GrailsParameterMap params = grailsRequest.getParams();

      return getParamValue(params, conversionMethodName, name);
    }

    log.warn("Unsupported parameter type " + type + " for parameter " + name);
    return null;
  }
  @SuppressWarnings({"unchecked", "rawtypes"})
  protected void copyParamsFromPreviousRequest(
      RequestAttributes previousRequestAttributes, GrailsWebRequest requestAttributes) {
    if (!(previousRequestAttributes instanceof GrailsWebRequest)) {
      return;
    }

    Map previousParams = ((GrailsWebRequest) previousRequestAttributes).getParams();
    Map params = requestAttributes.getParams();
    for (Object o : previousParams.keySet()) {
      String name = (String) o;
      params.put(name, previousParams.get(name));
    }
  }
  /**
   * Populates request parameters for the given UrlMappingInfo instance using the GrailsWebRequest
   *
   * @param webRequest The Map instance
   * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
   */
  @SuppressWarnings("unchecked")
  protected void populateParamsForMapping(GrailsWebRequest webRequest) {
    Map dispatchParams = webRequest.getParams();
    String encoding = webRequest.getRequest().getCharacterEncoding();
    if (encoding == null) encoding = "UTF-8";

    for (Map.Entry<String, Object> entry : params.entrySet()) {
      String name = entry.getKey();
      Object param = entry.getValue();
      if (param instanceof Closure) {
        param = evaluateNameForValue(param);
      }
      if (param instanceof String) {
        try {
          param = URLDecoder.decode((String) param, encoding);
        } catch (UnsupportedEncodingException e) {
          param = evaluateNameForValue(param);
        }
      }
      dispatchParams.put(name, param);
    }

    final String viewName = getViewName();
    if (viewName == null && getURI() == null) {
      webRequest.setControllerName(getControllerName());
      webRequest.setActionName(getActionName());
    }

    String id = getId();
    if (!StringUtils.isBlank(id))
      try {
        dispatchParams.put(GrailsWebRequest.ID_PARAMETER, URLDecoder.decode(id, encoding));
      } catch (UnsupportedEncodingException e) {
        dispatchParams.put(GrailsWebRequest.ID_PARAMETER, id);
      }
  }