加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

Grails暂时属性在对象创建时不会被拾取

发布时间:2020-12-14 18:52:42 所属栏目:资源 来源:网络整理
导读:从Grails 1.3.7迁移到2.0.4我注意到我的一个域类的一个问题,我使用临时属性来处理密码. 我的域类看起来像这样(简化): package test class User {String email String password1String password2//ShiroUser shiroUserstatic constraints = { email(email:tr
从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,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都为空.
如果我尝试做,在我的控制器中也会发生同样的事情:

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中变得无效,或者这可能是一个框架的bug?

解决方法

为安全起见,瞬变不再自动绑定.但是您可以通过添加“可绑定”约束(参见 http://grails.org/doc/latest/ref/Constraints/bindable.html)来轻松实现.更改
password2(nullable:true,obj ->

password2(bindable: true,nullable:true,obj ->

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读