我正在尝试迁移 grails-timezone-detection Grails 3 的 grails 插件。
在原始代码中有以下方法:
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
中唯一的 bean包是org.grails.plugins.web.taglib.ApplicationTagLib
.为什么以下内容也不可用?
我怀疑我遗漏了一些非常明显的东西。
有人对我应该如何进行有任何建议吗?
最佳答案
奇怪的是它不适用于 FormTagLib
因为它适用于 ApplicationTagLib
:
ApplicationTagLib g = grailsApplication.mainContext.getBean(ApplicationTagLib.class.name)
话虽如此,看起来我在我的一个项目中遇到了同样的问题。这是我解决它的方法,但显然这不是最好的方法,因为依赖注入(inject)不起作用:
private def getDefaultFormTagLib() {
def bean = new org.grails.plugins.web.taglib.FormTagLib()
bean.grailsTagDateHelper = new DefaultGrailsTagDateHelper()
return bean
}
希望其他人能提出更好的答案。
关于grails - 我将如何覆盖 taglib bean 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017561/