【问题标题】:Adding changes listeners in Grails' GORM在 Grails 的 GORM 中添加更改监听器
【发布时间】:2012-03-21 16:33:47
【问题描述】:

我是 Grails 新手,我正在使用 Grails 2.0.1。我想为域类的对象更改添加持久性事件侦听器,因此我尝试了用户指南中给出的 Bootstrap.groovy 中的代码:

def init = {
    applicationContext.addApplicationListener(new FooBarListener())
}

我收到以下错误消息:

ERROR context.GrailsContextLoader - 执行引导时出错:没有这样的属性:类的 applicationContext:BootStrap

如何从 BootStrap 类中获取 applicacionContext 属性? 或者文档是否已过时并且有一种新的/更好的方法来添加域更改侦听器?。

提前致谢。

【问题讨论】:

    标签: grails grails-orm grails-2.0


    【解决方案1】:

    我知道的最短路径是

    class BootStrap {
    
       def grailsApplication
    
       def init = { servletContext ->
          def applicationContext = grailsApplication.mainContext
       }
    }
    

    【讨论】:

      【解决方案2】:
      import org.codehaus.groovy.grails.commons.ApplicationAttributes
      
      class BootStrap {
      
          def init = {servletContext ->
      
              def applicationContext = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT) 
          }
      }
      

      【讨论】:

      • 谢谢,这似乎可行,但我遇到了另一个相关问题。现在错误消息显示:java.lang.NoSuchMethodError: org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener: method <init>()V not found。你知道如何实现一个工作监听器吗?。
      【解决方案3】:

      applicacionContext 必须在 BootStrap 中定义。以下应该工作

           class BootStrap {
             def applicacionContext 
      
          def init = {
           applicationContext.addApplicationListener(new FooBarListener())
          }
      
         }
      

      【讨论】:

      • 对于初学者,不,它不起作用,而且拼写不正确。
      • 抱歉拼写错误..感谢您的理解..你是对的..我认为既然 grailsApplication 和服务在 Bootstrap 中可用,那么 applicationContext 应该可用。但我错了..
      • 在发帖前很容易测试 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2018-05-03
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多