【问题标题】:Grails: transients variable not accessible in custom validator?Grails:自定义验证器中无法访问瞬态变量?
【发布时间】:2015-03-16 15:54:23
【问题描述】:

我找不到obj.confirmPassword 始终为空的原因。 如果confirmPassword 不是瞬变的一部分,则一切正常。

String confirmPassword
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired

static transients = ['springSecurityService', 'confirmPassword']

static constraints = {
   username blank: false, unique: true, minSize: 4, maxSize: 64
   password blank: false, nullable: false, minSize: 4, maxSize: 64, validator: {password, obj ->
      def password2 = obj.confirmPassword
      password2 == password ? true : ['invalid.matchingpasswords']
   }
   userFullname blank: false, minSize: 4, maxSize: 64
}

调用 save() 时会抛出 NullPointer:

String confirmPasswordField
    static transients = ['springSecurityService', 'confirmPasswordField']

    static constraints = {
        confirmPasswordField bindable: true, nullable:true, blank: false
        username blank: false, unique: true, minSize: 4, maxSize: 64
        password blank: false, nullable: false, minSize: 4, maxSize: 64, validator: {password, obj ->
            def confirmPassword = obj.confirmPasswordField
            confirmPassword == password ? true : ['invalid.matchingpasswords']
        }
        userFullname blank: false, minSize: 4, maxSize: 64
    }

如果我评论所有关于 confirmPasswordField 的内容 - save() 很好。

【问题讨论】:

    标签: validation grails transient


    【解决方案1】:

    出于安全原因,瞬态不再自动绑定。但是您可以通过添加“可绑定”约束轻松使其工作(请参阅http://grails.org/doc/latest/ref/Constraints/bindable.html)。你可以像这样使用confirmPassword。

    confirmPassword(bindable: true, nullable:true, blank: false)
    

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 2016-05-13
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多