我如何覆盖taglib bean中的方法?

问题描述 投票:1回答:1

我正在尝试将grails-timezone-detection grails插件迁移到Grails 3。

在原始代码中有以下方法:

private def getDefaultFormTagLib() {
    return grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.FormTagLib')
}

我重写如下:

private def getDefaultFormTagLib() {
    return grailsApplication.mainContext.getBean('org.grails.plugins.web.taglib.FormTagLib')
}

运行测试,我收到以下错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.grails.plugins.web.taglib.FormTagLib' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078)
at com.captivatelabs.grails.timezone.detection.TimeZoneTagLib.getDefaultFormTagLib(TimeZoneTagLib.groovy:76)
at com.captivatelabs.grails.timezone.detection.TimeZoneTagLib$_closure3.doCall(TimeZoneTagLib.groovy:42)
at groovy.lang.Closure.call(Closure.java:414)
at org.grails.taglib.TagOutput.captureTagOutput(TagOutput.java:64)
at com.captivatelabs.grails.timezone.detection.TimeZoneTagLibSpec.test offset server to client time - datePicker(TimeZoneTagLibSpec.groovy:85)

我添加了以下内容来输出插件可用的bean:def ctx = grailsApplication.mainContext ctx.beanDefinitionNames.sort()。each {println it}

org.grails.plugins.web.taglib包中唯一的豆是org.grails.plugins.web.taglib.ApplicationTagLib

为什么以下不可用?

  • org.grails.plugins.web.taglib.FormTagLib
  • org.grails.plugins.web.taglib.FormatTagLib

我怀疑我错过了一些非常明显的东西。

有没有人对我该如何进行有任何建议?

grails grails-plugin grails-3.3
1个回答
0
投票

奇怪的是它对FormTagLib不起作用,因为它适用于ApplicationTagLib

ApplicationTagLib g = grailsApplication.mainContext.getBean(ApplicationTagLib.class.name)

话虽这么说,看起来我的一个项目中遇到了同样的问题。这是我如何解决它,但显然这不是最好的方法,因为依赖注入不起作用:

private def getDefaultFormTagLib() {
    def bean = new org.grails.plugins.web.taglib.FormTagLib()
    bean.grailsTagDateHelper = new DefaultGrailsTagDateHelper()
    return bean
}

希望其他人能够提出更好的答案。

© www.soinside.com 2019 - 2024. All rights reserved.