grails 2.2.2 platform-core-plugin领域模型中没有方法事件签名



我尝试了platform-core-1.0 rc5 Plugin来按事件服务。现在我在grails-plugin "listadmin"中编写一个服务:

package listadmin
class SECO_ListenService {
    @grails.events.Listener(topic='getEntriesOfList', namespace='listadmin')
    def getEntriesOfList(String intnalListName) {
        println "SECO_ListenService"
        def Liste aList = Liste.findByInternal_name(intnalListName)
        return aList.eintrage.toList()
    }
}

这个服务应该返回一个下拉列表在另一个grails插件名为"institutionadmin"。我想将这个服务列表用于域模型的下拉列表。我应该提到我使用动态脚手架。现在我尝试在域模型中调用此事件:

package institutionadmin
import org.springframework.dao.DataIntegrityViolationException
class Einrichtung {
    Long einrichtungs_type
    Long type_of_conzept
    int anzahl_gruppen
    int anzahl_kinder_pro_Gruppe
    String offnungszeiten
    static hasMany = [rooms : Raum]
    static constraints = {
        def aList = []
        def reply = event(for:"listadmin", topic:"getEntriesOfList", data:"einrichtung_type").waitFor()
        aList = reply.value.toList()
        einrichtungs_type(inList: aList)
    }
}

如果我尝试运行这个应用程序,我得到以下错误:

由MissingMethodException引起:No signature of method: institutionadmin.Einrichtung.event()是适用于参数类型:(java.util.LinkedHashMap) values: [[for:listadmin, topic:testEventBus]]可能的解决方案:ident(), every(), every(groovy.lang.Closure), count(), get(java.io.Serializable), print(java.lang.Object)

如果在控制器中调用这个事件,一切都很好,这个插件的文档描述了我也可以在域模型和服务中调用事件…这个错误方法告诉我,类不知道事件方法。

我还需要配置什么吗?

应该以另一种方式调用事件还是我的错误在哪里?

有人使用过这个模块吗?

event(...)动态方法在类(静态)级别不可用。

您可以拉grailsEvents弹簧bean并调用其event()方法。但是,您仍然必须从应用程序上下文中静态地获取bean。

您也可以使用自定义验证器,因为您可以将当前域实例作为参数,该参数应该注入event()方法。

像这样:

static myList = []
static constraints = {
    einrichtungs_type validator: { value, instance ->
        if(!myList){
            // cache it the first time you save/validate the domain
            // I would probably recommend you NOT to do this here though in 
            // real life scenario
            def reply = instance.event('blabla').get()
            myList = reply.value.toList()
        }
        return value in myList
    }
}

无论如何,在我的情况下,我可能会加载列表在其他地方(在Bootstrap.groovy为例),并使用它/注入它在我的域,而不是在约束闭包。

我遇到了类似的问题,我想在服务类中使用事件调用,它将调用其他服务类中的侦听器。当我开始我的应用程序,我得到了同样的错误。我所做的是,在BuildConfig.groovy中添加了插件(platform-core:1.0.RC5)条目,如下面的

plugins {
    build(":tomcat:$grailsVersion",
        ":platform-core:1.0.RC5") {
        export = false
    }
    compile ':platform-core:1.0.RC5'
    runtime ':platform-core:1.0.RC5'
}

然后我在这个项目上运行grails> clean和grails> compile并重新启动服务器。它开始起作用了。也许你可以试一试。

相关内容

  • 没有找到相关文章

最新更新