2

我找到了有关如何使用 Spring 3 创建自定义类型转换器的文档,但是我找不到在 Grails 中注册转换器以便bindData可以使用它的任何示例。

我尝试将此配置添加到 conf/spring/resources.groovy 文件中:

conversionService(org.springframework.context.support.ConversionServiceFactoryBean) {
    converters {
        com.initech.reports.tps.StringToFooConverter
    }   
}

这最终会踩到一些东西,因为一旦我添加转换器,我就会在启动时得到一个堆栈跟踪,如下所示:

2012-06-21 10:09:50,614 [main] 错误 context.GrailsContextLoader - 执行引导程序时出错:创建名称为“FooApprovers”的 bean 时出错:无法创建 [org.springframework.xml. xsd.commons.CommonsXsdSchemaCollection] 同时设置 bean 属性'schemaCollection';嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为 '(inner bean)#7' 的 bean 时出错:bean 的初始化失败;嵌套异常是 org.springframework.beans.TypeMismatchException:无法将类型“java.lang.String[]”的属性值转换为属性“xsds”所需的类型“org.springframework.core.io.Resource[]”;嵌套异常是 org.springframework.core.convert.ConversionFailedException:无法将值“{/WEB-INF/ws/FooApproversService.xsd}”从“java.lang.String[]”类型转换为“org.springframework.core.io.Resource[]”类型;嵌套异常是 org.springframework.core.convert.ConverterNotFoundException:找不到能够从“java.lang.String”转换为“org.springframework.core.io.Resource”的转换器 org.springframework.beans.factory.BeanCreationException:错误创建名为“FooApprovers”的bean:在设置bean属性“schemaCollection”时无法创建[org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection]类型的内部bean“(内部bean)”;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为 '(inner bean)#7' 的 bean 时出错:bean 的初始化失败;嵌套异常是 org.springframework.beans.TypeMismatchException:无法将类型“java.lang.String[]”的属性值转换为属性“xsds”所需的类型“org.springframework.core.io.Resource[]”;嵌套异常是 org.springframework.core.convert.ConversionFailedException: Unable to convert value "{/WEB-INF/ws/FooApproversService.xsd}" from type 'java.lang.String[]' to type 'org.springframework.core .io.Resource[]'; 嵌套异常是 org.springframework.core.convert.ConverterNotFoundException:在 org.grails.tomcat.TomcatServer.start( TomcatServer.groovy:212) 在 grails.web.container.EmbeddableServer$start。

我正在使用 Grails 1.3.7(包括 Spring 3.0.5)。

所以显然还有其他一些类型转换器被添加的方式,我通过显式配置转换服务搞砸了?有没有办法在不踩其他转换器的情况下注册自定义类型转换器?

4

1 回答 1

1

我猜您正在寻找自定义属性编辑器。

您将需要创建自定义属性编辑器和属性编辑器注册器,然后在 resources.groovy 中注册您的注册器 - 之后 bindDate 应该能够使用它

看这篇文章

于 2012-06-21T15:35:17.283 回答