2008-10-18 44 views
1

代码在我的GSP文件访问时,静态约束

${personRequest.constraints.requestStatus.inList} 

我得到一个NullPointerException抛出一个NullPointerException,但new PersonRequest().constraints..作品。为什么?是不是constraints是静态的?

回答

3

here(Grails的用户邮件列表)

复制,但为什么accesing到静态字段 不工作?

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

Grails的评估使用 约束建立器,监视 “来电”的方法不存在, 即您使用属性名称此封:

type(inList: [xxxxx]) 

...导致方法调用“类型”与 一个Map参数包含“inList” ==>一些值。

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

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

我们-could-看评估 闭幕与初始化后更换运行时的值静态约束属性 的 。但是这可能会有点“太多”的魔力。人们认为什么?

FYI是这样的,现在因为直到 0.4(如果我记得)制约因素不是一成不变的,而在0.4它们可以 还是非静态的。只有在0.5
我们会抛出一个异常/忽略 非静态约束。