Grails 1.3.7から2.0.4に移行した後、パスワードを処理するために一時的なプロパティを使用するドメインクラスの1つに問題があることに気付きました。
私のドメインクラスは次のようになります(簡略化):
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']
}
1.3.7では、これは私のBootstrapで機能していました。
def user1= new User (email: "test@test.com", password1: "123456", password2: "123456")
user1.save()
ただし、Grails 2.0.xでは、これにより、password1とpassword2の両方がnullであるというエラーが発生します。私がやろうとすると、同じことが私のコントローラーでも起こります:
def user2= new User (params)// params include email,password1 and password2
それを機能させるには、次の回避策を実行する必要があります。
def user2= new User (params)// params include email,password1 and password2
user2.password1=params.password1
user2.password2=params.password2
user2.save()
これはかなり醜いです-そして迷惑です。
grails 2.xでトランジェントの使用が無効になったかどうか、またはこれが何らかのフレームワークのバグである可能性があるかどうかを誰かが言うことができますか?