“Grails动态”;inList";
这几乎与这个老问题相同:这个问题基本上没有得到解决,也许在提出这一问题后的几年里取得了进展 我想用另一个域的值填充域属性的“Grails动态”;inList";,grails,grails3,Grails,Grails3,这几乎与这个老问题相同:这个问题基本上没有得到解决,也许在提出这一问题后的几年里取得了进展 我想用另一个域的值填充域属性的inList参数。由于自动生成的视图(scaffolding、filterpane),这需要来自inList,而不是自定义验证器 class MyDomain { String someValue static constraints = { someValue(nullable: true, maxSize: 50, inList: SomeOtherDom
inList
参数。由于自动生成的视图(scaffolding、filterpane),这需要来自inList
,而不是自定义验证器
class MyDomain {
String someValue
static constraints = {
someValue(nullable: true, maxSize: 50, inList: SomeOtherDomain.list()*.name)
}
}
这会在启动时产生以下错误:
原因:java.lang.IllegalStateException:类[thepackage.SomeOtherDomain]不是域类,或者GORM未正确初始化或已关闭。在调用GORM实体上的任何方法之前,确保正确加载和配置GORM。
我知道,处理这个问题的“正确”方法是将
someValue
作为SomeOtherDomain
的一个实例,而不是仅仅存储名称,但这不太合适。我们希望能够删除SomeOtherDomain
的实例,而不破坏所属域的保存值。。。具有已删除值的域今后将无效,并且在保存之前必须更新,但存档/锁定的记录仍将存在并可以显示。您可以为filterpane指定如下值列表:
<filterpane:filterPane domain="MyObject" filterPropertyValues="${['someValue':[values: SomeOtherDomain.list().collect{it.name}]]}" />
然后使用自定义验证器进行实际验证。我不确定什么样的脚手架可能会使用inList,但如果你同意用静态页面替换一些脚手架页面,那么就可以很容易地绕过它