这几乎与这个古老的问题完全相同:Dynamic define the inList constraint using database query基本上没有得到解决,也许自从被问到这些年以来已经取得了进展。
我想使用来自其他域的值填充域属性的inList
参数。由于自动生成的视图(scaffolding,filterpane),这需要来自inList
而不是自定义验证器。
class MyDomain {
String someValue
static constraints = {
someValue(nullable: true, maxSize: 50, inList: SomeOtherDomain.list()*.name)
}
}
这会在启动时出现以下错误:
Caused by: java.lang.IllegalStateException: Either class [thepackage.SomeOtherDomain] is not a domain class or GORM has not been initialized correctly or has already been shutdown. Ensure GORM is loaded and configured correctly before calling any methods on a GORM entity.
我知道,处理此问题的“正确”方法是使someValue
成为SomeOtherDomain
的实例,而不仅仅是存储名称,但这并不合适。我们希望能够删除SomeOtherDomain
的实例而不破坏拥有域的已保存值...具有已删除值的域将在以后无效,并且必须在保存之前进行更新,但是已归档/锁定记录仍然存在并可以显示。
答案 0 :(得分:1)
您可以为filterpane指定值列表,如下所示:
<filterpane:filterPane domain="MyObject" filterPropertyValues="${['someValue':[values: SomeOtherDomain.list().collect{it.name}]]}" />
然后只需使用自定义验证器进行实际验证。我不确定什么脚手架可能会使用inList,但如果你能用静态替换一些脚手架页面就可以轻松解决这个问题。