为什么方法redirect()只接受grails 2.5.x的一个参数

时间:2016-03-04 08:53:19

标签: grails groovy

grails的重定向方法只能接受一个域类重定向到相应的“show”视图。

book.save flush:true
    withFormat {
        html { 
            flash.message = message(code: 'default.created.message', args: [message(code: 'book.label', default: 'Book'), book.id])
            redirect book 
        }
        '*' { render status: CREATED }
    }

但源代码

  public Object redirect(Object instance,Object object) {
        if(object != null) {

            Class<?> objectClass = object.getClass();
            boolean isDomain = DomainClassArtefactHandler.isDomainClass(objectClass) && object instanceof GroovyObject;
            if(isDomain) {

                Object id = ((GroovyObject)object).getProperty(GrailsDomainClassProperty.IDENTITY);
                if(id != null) {
                    Map args = new HashMap();
                    args.put(LinkGenerator.ATTRIBUTE_RESOURCE, object);
                    args.put(LinkGenerator.ATTRIBUTE_METHOD, HttpMethod.GET.toString());
                    return redirect(instance, args);
                }
            }
        }
        throw new CannotRedirectException("Cannot redirect for object ["+object+"] it is not a domain or has no identifier. Use an explicit redirect instead ");
    }

表明应该将2个参数传递给该方法。实际上我只能将第二个参数传递给方法。为什么呢?

1 个答案:

答案 0 :(得分:0)

这个2参数方法是从控制器调用redirect(…)后由框架调用的方法。第一个参数将由this(您调用redrect方法的控制器)填充,而不是在您调用redirect(…)时显式传递的参数。我希望这是有道理的。

这类似于Groovy扩展方法和类别的工作方式。