【发布时间】:2011-05-09 12:44:05
【问题描述】:
更新:对类等做了一些错误的假设。当我有一个“演示”项目时,现在会发生以下情况:
我有两个班级,都名为“公司”。
- 一个放在 grails-app/domain/my.classes.domain.Company 中
- 另一个在 src/groovy/my.clazz.Company 中
最后一个有@Validateable注解,Config.groovy包含grails.validateable.packages = ['my.clazz']
我还有一个 Account 类,位于 grails-app/domain/my.classes.domain.Account:
package my.classes.domain
导入 java.io.Serializable;
类 Account 实现 Serializable { Company company }
然后我使用以下代码(在 bootstrap.groovy 中):
import my.classes.domain.Company
import my.classes.domain.Account
...
Company company = new Company
Account acccount = new Account(company: company)
运行此应用时,显示以下错误:
原因:org.springframework.beans.ConversionNotSupportedException:无法将类型 [my.clazz.Company] 的值转换为属性“公司”所需的类型 [my.classes.domain.Company]:找不到匹配的编辑器或转换策略 ... 33 更多 引起:java.lang.IllegalStateException: 无法将类型 [my.clazz.Company] 的值转换为属性“公司”所需的类型 [my.classes.domain.Company]:找不到匹配的编辑器或转换策略这是一个非常奇怪的例外,因为一切似乎都很好。 一些测试证明了以下“提示”: 当我修改 config.groovy 以显式命名类时不会发生此错误(即使用 grails.validateable.classes = ['my.classes.domain.Company']), 当我将帐户的公司属性修改为不同的名称(并相应地修改引导程序)时,不会发生此错误,即:
class Account extends Serializable {
Company cmp
}
但是,这些都是解决方法。我真的很感兴趣为什么会这样。有人知道吗?
为了安全起见,我做了以下操作来制造这个问题:
- 创建域类:my.classes.domain.Company
- 创建域类:my.classes.domain.Account
- 如上修改域类
- 创建一个 groovy 类:my.clazz.Company
- 为这个 groovy 类提供 Validatable 注解。
- 将 my.clazz 包添加到可验证的包中
- 在引导程序中,使用新帐户(公司:公司)创建一个新帐户
【问题讨论】:
标签: grails grails-domain-class grails-validation