2015-01-18 14 views
0

Я не могу найти причину, по которой obj.confirmPassword всегда имеет значение null. Если confirmPassword не является частью переходных процессов, все работает нормально.Grails: переменная переходных процессов недоступна в пользовательском валидаторе?

String confirmPassword 
boolean enabled = true 
boolean accountExpired 
boolean accountLocked 
boolean passwordExpired 

static transients = ['springSecurityService', 'confirmPassword'] 

static constraints = { 
    username blank: false, unique: true, minSize: 4, maxSize: 64 
    password blank: false, nullable: false, minSize: 4, maxSize: 64, validator: {password, obj -> 
     def password2 = obj.confirmPassword 
     password2 == password ? true : ['invalid.matchingpasswords'] 
    } 
    userFullname blank: false, minSize: 4, maxSize: 64 
} 

это один бросок NullPointer при экономии() называется:

String confirmPasswordField 
    static transients = ['springSecurityService', 'confirmPasswordField'] 

    static constraints = { 
     confirmPasswordField bindable: true, nullable:true, blank: false 
     username blank: false, unique: true, minSize: 4, maxSize: 64 
     password blank: false, nullable: false, minSize: 4, maxSize: 64, validator: {password, obj -> 
      def confirmPassword = obj.confirmPasswordField 
      confirmPassword == password ? true : ['invalid.matchingpasswords'] 
     } 
     userFullname blank: false, minSize: 4, maxSize: 64 
    } 

Если я комментирую все вещи относительно confirmPasswordField - сохранить() будет отлично.

ответ

0

Из соображений безопасности переходные процессы больше не являются автоматическими. Но вы можете легко заставить его работать, добавив «привязываемое» ограничение (см. http://grails.org/doc/latest/ref/Constraints/bindable.html). Вы можете использовать confirmPassword, как это.

confirmPassword(bindable: true, nullable:true, blank: false) 
Смежные вопросы