2015-04-17 4 views
1

Это простой пример, который не работает, мне интересно, есть ли способ проверить a внутри блока валидатора b, если он еще не был проверен.Может ли одно ограничение на объект команды проверять результат другого?

Пример, как я думал, что это будет работать:

static constraints = 
{ 
    a nullable: false 
    b validator: { val, obj -> 
     if(obj.errors.hasFieldError('a')) 
     { 
      return false 
     } 
    } 
} 

Примечание: в этом случае obj.errors.hasFieldError('a') возвращает ложное, даже если a равна нулю.

ответ

3

Я не думаю, что есть гарантия того, что ограничения проверяются, и маловероятно, чтобы это имело какое-либо отношение к порядку, указанному в блоке constraints.

Однако в дополнение к обычным валидаторам one-arg, которые передают вам текущее значение для этого поля и проверочный файл two-arg, вы показываете, где вы также получаете доступ к экземпляру класса домена, есть вариант с тремя аргументами (к сожалению, это не рассматривается в справочных документах Grails ...), где третий аргумент - это пример Spring Errors. Если вы определяете валидатор с тремя аргументами, GORM игнорирует любое возвращаемое значение, так как предполагается, что вы будете работать непосредственно с экземпляром Errors, вызывая один или несколько различных методов для любых вопросов проверки.

Таким образом, вы можете удалить из блока constraints любые стандартные проверки, которые вы хотите запустить самостоятельно, и использовать этот подход. Дополнительную информацию о работе с объектом Errors можно получить в the Spring docs.

+0

Похоже на отличную идею, у меня есть несколько полей, которые я бы хотел проверить, поэтому мне нужно, чтобы они были за пределами закрытия ограничений. Я не слишком хорошо знаком с закрытием, можно ли вызвать ограничение закрытия в методе и передать ему некоторые имена полей, чтобы действовать? –

 Смежные вопросы

  • Нет связанных вопросов^_^