我为我的域类创建了一个静态脚手架,并为该域类获得了一个控制器。控制器的create
操作如下:
def create() {
[userInstance: new User(params)]
}
我想知道为什么这行:
[userInstance: new User(params)]
已添加。显然,当调用create
动作时,不会有params
- 所以为什么要添加这一行呢?
答案 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,虽然通常不会有。
它允许预加载值,这有时可能会有所帮助,包括重新显示创建表单。