Я работаю с новым "GrailsDomainClass API" в Grails 3.3.6. Доступ к ограничениям можно получить, вызвав constrainedProperties для класса домена. Острота.
Однако попытка сделать это со встроенным доменом приводит к groovy.lang.MissingPropertyException . У Grails нет проблем с обработкой встроенного источника домена, ограничений и всего, но у меня проблема с их программным поиском. Подсказки оценены.
Редактировать: Пример метода:
private Constrained resolveConstraints(DomainClassMeta currentBeanMeta,
DomainPropertyMeta currentPropertyMeta)
{
String propertyName = currentPropertyMeta.name
def constrained = null
try {
constrained = currentBeanMeta.clazz.constrainedProperties[propertyName]
} catch (groovy.lang.MissingPropertyException exc) {
// Ignore
}
return constrained
}
В этом методе currentBeanMeta.clazz
извлекает домен java.lang.Class. Мы вызываем constrainedProperties
, чтобы получить карту, проиндексированную по именам свойств. (Это явно упоминается в руководстве пользователя Grails.) В настоящее время результатом является org.grails.validation.ConstrainedDelegate
, который реализует Constrained
. Однако, если домен внедрен, исключение выдается, потому что свойство constrainedProperties
отсутствует. Для чего это стоит, встроенный домен был введен в контекст сопоставления через createEmbeddedEntity(clazz)
.