1

编码

${personRequest.constraints.requestStatus.inList}

在我的 gsp 文件中抛出一个NullPointerException,但new PersonRequest().constraints..有效。为什么?不是constraints静态的吗?

4

1 回答 1

3

从这里复制(grails 用户邮件列表)

但是为什么访问静态字段不起作用?

因为“约束”静态字段是一个闭包属性。它没有与约束相关的子属性。

Grails 使用一个约束构建器来评估这个闭包,该构建器监控对不存在的方法的“调用”,即您使用的属性名称:

type( inList: [xxxxx])

...导致使用包含“inList”==> 某个值的 Map 参数对“type”进行方法调用。

根据这些信息,Grails 构建了所有
可用约束的列表,并将它们绑定到域类的未来实例。

因此,当您静态访问 User.constraints 时,您将获得一个
闭包。

在评估初始化它的闭包之后,我们可以考虑在运行时替换静态约束属性的值。然而,这可能有点“太多”的魔力。人们怎么想?

仅供参考,现在是这样,因为直到 0.4(如果我记得)约束不是静态的,而在 0.4 中它们仍然可以是非静态的。只有在 0.5
中,我们才会抛出异常/忽略非静态约束。

于 2008-10-18T11:20:58.790 回答