Joh*_*ann 12 grails grails-domain-class grails-2.0
从Grails 1.3.7迁移到2.0.4后,我注意到我的一个域类存在问题,我使用瞬态属性来处理密码.
我的域类看起来像这样(简化):
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']
}
Run Code Online (Sandbox Code Playgroud)
在1.3.7中,这曾经在我的Bootstrap中工作:
def user1= new User (email: "test@test.com", password1: "123456", password2: "123456")
user1.save()
Run Code Online (Sandbox Code Playgroud)
但是,在Grails 2.0.x中,这将导致错误,指出password1和password2都为null.如果我尝试这样做,我的控制器会发生同样的事情:
def user2= new User (params)// params include email,password1 and password2
Run Code Online (Sandbox Code Playgroud)
为了使其工作,我必须执行以下解决方法:
def user2= new User (params)// params include email,password1 and password2
user2.password1=params.password1
user2.password2=params.password2
user2.save()
Run Code Online (Sandbox Code Playgroud)
这非常难看 - 而且很烦人.
任何人都可以说,如果我在grails 2.x中使用瞬态变得无效,或者这可能是某种框架错误?
Bur*_*ith 15
出于安全考虑,瞬态不再是自动绑定的.但是您可以通过添加"可绑定"约束来轻松地使其工作(请参阅http://grails.org/doc/latest/ref/Constraints/bindable.html).更改
password2(nullable:true, blank: false, validator: {password, obj ->
Run Code Online (Sandbox Code Playgroud)
至
password2(bindable: true, nullable:true, blank: false, validator: {password, obj ->
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3879 次 |
| 最近记录: |