没有这个的 grails 3.1.10 自定义验证器问题。定义

标签 grails

情况没什么特别的,我确信它最近才开始发生尝试 grails clean这并没有解决这个问题:

域类:

  static constraints = {
     someThing(nullable:true, validator: this.checkSomething)
    }
    static def checkSomething= { val, obj, errors ->
        if (val && obj.something?.findAll()?.size()>2 {
            errors.rejectValue("something.error", [''] as Object[], '')
        }
    }

没有 this.以下错误。使用 this.staticMethod ide 提示它不是必需的。是的,我不应该需要它。只是想知道为什么奇怪的场景

导致的错误:
Caused by: groovy.lang.MissingPropertyException: No such property: checkSomething for class: org.grails.orm.hibernate.cfg.HibernateMappingBuilder
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
    at com.example$__clinit__closure1.doCall(MyClass.groovy:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021)
    at groovy.lang.Closure.call(Closure.java:426)
    at com.example$__clinit__closure1.call(MyClass.groovy)
    at groovy.lang.Closure.call(Closure.java:442)
    at com.example$__clinit__closure1.call(MyClass.groovy)
    at org.grails.orm.hibernate.cfg.HibernateMappingBuilder.evaluate(HibernateMappingBuilder.groovy:81)
    at org.grails.orm.hibernate.cfg.HibernateMappingBuilder.evaluate(HibernateMappingBuilder.groovy)
    at org.grails.datastore.mapping.config.AbstractGormMappingFactory.evaluateWithContext(AbstractGormMappingFactory.java:96)
    at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:84)
    at org.grails.orm.hibernate.cfg.HibernatePersistentEntity$1.<init>(HibernatePersistentEntity.java:41)
    at org.grails.orm.hibernate.cfg.HibernatePersistentEntity.<init>(HibernatePersistentEntity.java:40)
    at org.grails.orm.hibernate.cfg.HibernateMappingContext.createPersistentEntity(HibernateMappingContext.java:104)
    at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntities(AbstractMappingContext.java:184)
    at org.grails.orm.hibernate.cfg.HibernateMappingContext.<init>(HibernateMappingContext.java:55)
    at org.grails.orm.hibernate.support.HibernateMappingContextFactoryBean.getObject(HibernateMappingContextFactoryBean.groovy:34)
    at org.grails.orm.hibernate.support.HibernateMappingContextFactoryBean.getObject(HibernateMappingContextFactoryBean.groovy)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
    ... 63 common frames omitted

最佳答案

我找到的解决方案涉及使用静态方法显式指定类的名称。我猜这个问题来自 Grails 用来支持静态约束 = { thingsThatLookLikeParamsButAreReallyMethodCalls } 语法的 Groovy 拦截器魔法。

class MyClassFoo {

  static constraints = {
     someThing(nullable:true, validator: MyClassFoo.checkSomething)
  }

  static checkSomething= { val, obj, errors ->
     // your logic
  }
}

关于没有这个的 grails 3.1.10 自定义验证器问题。定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863890/

相关文章:

facebook - 如何从 Grails 中的 Spring Security 的 Facebook 身份验证中获取 Facebook 用户名、电子邮件、电话号码等

java - 在 Grails 中保留对后台线程的引用?

grails - Grails domainClasses获得临时属性

grails - 如何在同一域的多个字段中重用自定义验证逻辑

从 2.1 升级到 2.2.4 后 Grails 自动编译中断

grails - 在智能中将grails 2.2.0升级到2.4

sql - Groovy SQL 忽略动态 select 语句中的 order by 子句

grails - 在 Grails/GSP 选择元素中格式化 POJO

来自数据库备份的属性文件的 Grails i18n?

grails - Shiro 因启用数据库 session 而崩溃