文档说,根据版本,访问Domain.constraints或Domain.constrainedProperties应该给出键值映射。
https://grails.github.io/grails2-doc/2.5.4/ref/Domain%20Classes/constraints.html
在运行时,静态约束属性是一个Map,因此Map中的键是属性名称,而与键关联的值是ConstrainedProperty的实例:
但是,使用2.5+时,在运行时访问constraints属性并没有给出映射,而是一个闭包,并且我无法访问ConstrainedProperty实例。
我尝试使用grails类utils来访问静态属性
GrailsClassUtils.getStaticFieldValue(Domain,"constraints")//this is still a closure
GrailsClassUtils.getStaticFieldValue(Domain,"constrainedProperties")//null, this property doesn't exist below version 3.0
答案 0 :(得分:2)
像文档中的示例一样,属性访问对我不起作用
Domain.constraints //returns closure
但是使用方法getter可以
Domain.getConstraints() //returns the map
答案 1 :(得分:0)
查看位于https://github.com/jeffbrown/constraintsmapdemo的项目。
https://github.com/jeffbrown/constraintsmapdemo/blob/master/grails-app/domain/demo/Widget.groovy:
package demo
class Widget {
int width
int height
static constraints = {
width range: 1..100
height range: 1..50
}
}
https://github.com/jeffbrown/constraintsmapdemo/blob/master/test/unit/demo/WidgetSpec.groovy处的测试通过:
package demo
import grails.test.mixin.TestFor
import spock.lang.Specification
@TestFor(Widget)
class WidgetSpec extends Specification {
void "test accessing the constraints property"() {
when:
def propValue = Widget.constraints
then:
propValue instanceof Map
propValue.containsKey 'width'
propValue.containsKey 'height'
}
}
如果您不使用静态编译,则Widget.constraints
将得出Map
。如果您使用静态编译,则Widget.getConstraints()
将返回Map
,但Widget.constraints
将得出闭包。