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 ->