grails grails-domain-class grails-2.0

Las propiedades transitorias de Grails no se recogen en la creación de objetos



grails-domain-class grails-2.0 (2)

Después de migrar de Grails 1.3.7 a 2.0.4, he notado un problema con una de mis clases de dominio donde uso propiedades transitorias para manejar contraseñas.

Mi clase de dominio se ve así (simplificada):

package test class User { String email String password1 String password2 //ShiroUser shiroUser static constraints = { email(email:true, nullable:false, unique:true) password1(nullable:true,size:5..30, blank: false, validator: {password, obj -> if(password==null && !obj.properties[''id'']){ return [''no.password''] } else return true }) password2(nullable:true, blank: false, validator: {password, obj -> def password1 = obj.properties[''password1''] if(password == null && !obj.properties[''id'']){ return [''no.password''] } else{ password == password1 ? true : [''invalid.matching.passwords''] } }) } static transients = [''password1'',''password2''] }

En 1.3.7 esto solía funcionar en mi Bootstrap:

def user1= new User (email: "[email protected]", password1: "123456", password2: "123456") user1.save()

Sin embargo, en Grails 2.0.x esto dará como resultado un error que indica que password1 y password2 son ambos nulos. Lo mismo sucede en mis controladores si trato de hacer:

def user2= new User (params)// params include email,password1 and password2

Para que funcione, tengo que hacer la siguiente solución alternativa:

def user2= new User (params)// params include email,password1 and password2 user2.password1=params.password1 user2.password2=params.password2 user2.save()

Esto es bastante feo y molesto.

¿Alguien puede decir si mi uso de transitorios se ha vuelto inválido en Grails 2.x, o si esto podría ser un error de framework de algún tipo?


Creo que como parte de la mejora del enlace de datos en Grails 2.x no se vincularán las propiedades transitorias.


Por razones de seguridad, los transitorios ya no son automáticos. Pero puede hacer que funcione fácilmente agregando una restricción ''enlazable'' (vea http://grails.org/doc/latest/ref/Constraints/bindable.html ). Cambio

password2(nullable:true, blank: false, validator: {password, obj ->

a

password2(bindable: true, nullable:true, blank: false, validator: {password, obj ->