为什么Grails的脚手架创建动作使用参数?

时间:2011-12-27 15:58:03

标签: grails groovy

我为我的域类创建了一个静态脚手架,并为该域类获得了一个控制器。控制器的create操作如下:

def create() {
    [userInstance: new User(params)]
}

我想知道为什么这行:

[userInstance: new User(params)]

已添加。显然,当调用create动作时,不会有params - 所以为什么要添加这一行呢?

3 个答案:

答案 0 :(得分:6)

  

显然,当调用create操作时,不会有任何params

不一定 - 想象一下您希望以创建视图的形式预先填充几个字段的情况。你可以使用:

/app/user/create?username=myusername

这将导致视图的userInstance具有填充的用户名字段,以便在表单中显示。

答案 1 :(得分:3)

这基本上是由Spring实现的,该操作被称为“绑定”,是绑定表单元素从一个jsp(在本例中为gsp)到对象属性的反作用,反之亦然。

要将一个对象绑定到一个表单,那么你应该首先创建它,ypu如何绑定一个空对象?这是不可能的,这就是为什么新的ClassObject(...)

在Groovy之后,我们有了POGO,而POGO的一个特点是能够用地图初始化它们,例如:

new User(name:'John',lastname:'Zuñiga')

但是在这种情况下,那个'params'对象有一小部分时髦魔法。那来自Groovy Servlets或Groovlets。如何从表单中获取Java传入的参数?好吧,使用request.getParam("param_name"),但在这种情况下使用Groovy你会得到一个params对象,这个params对象是一个地图,一个Groovy地图......呃,一秒......

如果Groovy中的POGO能够接收Map作为构造函数,并且params对象是Map ...也许......很酷我可以将该映射放在我的对象的构造函数中,并在Spring之后执行绑定使用这个新Object的表单,所以这个对象在这个控制器的动作中运行,所以它附带了填充的属性。

我希望这个解释清楚,如果你有疑问,我就在这里...... 此致

答案 2 :(得分:2)

可能是params,虽然通常不会有。

它允许预加载值,这有时可能会有所帮助,包括重新显示创建表单。