Grails命令对象初始化

时间:2014-05-09 16:41:26

标签: grails data-binding

在我的Grails 2.3.8应用程序中,我定义了以下控制器操作

class RegisterController {

    def register(User user) {
        render text: "User name is '$user.name'"
    }
}

user参数是域类实例。如果我使用URL

调用此控制器
http://localhost:8080/myapp/register/register

我得到NullPointerException。但是我对数据绑定的理解是,如果在没有任何参数的情况下调用此操作,则应为参数分配new User()

2 个答案:

答案 0 :(得分:5)

  

然而,我对数据绑定的理解是,如果这个动作是   在没有任何参数的情况下调用,该参数应该被赋予一个新的   用户()

情况不一定如此。对于域类命令对象,如果不存在任何参数,则仅为POST请求创建新实例。

来自http://grails.org/doc/2.4.0.RC1/guide/theWebLayer.html#commandObjects ...

  

如果命令对象的类型是域类,并且没有id   请求参数然后将null传递给控制器​​操作   除非HTTP请求方法是“POST”,在这种情况下是一个新实例   将通过调用域类来创建域类   构造

2.3.8文档中可能缺少该文本。我会验证并在必要时添加它。

答案 1 :(得分:-2)

如果修改了以下内容:

'$user.name'

成为:

'${user?.name}'