Grails transient 属性未在对象创建时获取

标签 grails grails-domain-class grails-2.0

从 Grails 1.3.7 迁移到 2.0.4 后,我注意到我的一个域类存在问题,我使用 transient 属性来处理密码。

我的域类看起来像这样(简化):

   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 都为空。
如果我尝试这样做,我的 Controller 也会发生同样的事情:
    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()

这很丑陋——而且很烦人。

谁能说我对 transient 的使用在 grails 2.x 中是否无效,或者这可能是某种框架错误?

最佳答案

出于安全原因, transient 不再自动绑定(bind)。但是您可以通过添加“可绑定(bind)”约束轻松使其工作(参见http://grails.org/doc/latest/ref/Constraints/bindable.html)。改变

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


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

关于Grails transient 属性未在对象创建时获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11297401/

相关文章:

grails - 在 Grails 中对属性进行 HTML 编码时如何正确验证域类?

grails - 标准的单元测试模拟

grails - 如何在项目根目录下测试GrailsPlugin类

grails - 如何有条件地禁用表单输入字段

javascript - Grails JavaScript调用 Controller 方法

java - Grails 2.0.4 打开 zip 文件时出错或缺少 Springloaded 的 JAR list

java - 如何按照提供的ID顺序从列表中的条件查询中获取对象

spring - 使用 Grails Spring Security Rest 插件时出现不够范围错误

grails - 如何设置基于hasMany关系的唯一类属性?

json - 从 grails 1.3.4 升级到 grails 2.1.1 后无法使用 "as JSON"