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个参数传递给该方法。实际上我只能将第二个参数传递给方法。为什么呢?
答案 0 :(得分:0)
这个2参数方法是从控制器调用redirect(…)
后由框架调用的方法。第一个参数将由this
(您调用redrect
方法的控制器)填充,而不是在您调用redirect(…)
时显式传递的参数。我希望这是有道理的。
这类似于Groovy扩展方法和类别的工作方式。