编码
${personRequest.constraints.requestStatus.inList}
在我的 gsp 文件中抛出一个NullPointerException
,但new PersonRequest().constraints..
有效。为什么?不是constraints
静态的吗?
从这里复制(grails 用户邮件列表)
但是为什么访问静态字段不起作用?
因为“约束”静态字段是一个闭包属性。它没有与约束相关的子属性。
Grails 使用一个约束构建器来评估这个闭包,该构建器监控对不存在的方法的“调用”,即您使用的属性名称:
type( inList: [xxxxx])
...导致使用包含“inList”==> 某个值的 Map 参数对“type”进行方法调用。
根据这些信息,Grails 构建了所有
可用约束的列表,并将它们绑定到域类的未来实例。因此,当您静态访问 User.constraints 时,您将获得一个
闭包。在评估初始化它的闭包之后,我们可以考虑在运行时替换静态约束属性的值。然而,这可能有点“太多”的魔力。人们怎么想?
仅供参考,现在是这样,因为直到 0.4(如果我记得)约束不是静态的,而在 0.4 中它们仍然可以是非静态的。只有在 0.5
中,我们才会抛出异常/忽略非静态约束。