0

更新:对类等做了一些错误的假设。当我有一个“演示”项目时,现在会发生以下情况:

我有两个班级,都名为“公司”。

  • 一个放在 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

import java.io.Serializable;

class Account implements 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
}

但是,这些都是解决方法。我真的很感兴趣为什么会这样。有人有线索吗?

为了安全起见,我做了以下操作来产生这个问题:

  1. 创建域类:my.classes.domain.Company
  2. 创建域类:my.classes.domain.Account
  3. 如上修改域类
  4. 创建一个 groovy 类:my.clazz.Company
  5. 给这个 groovy 类 Validatable 注释。
  6. 将 my.clazz 包添加到可验证的包中
  7. 在引导程序中,使用新帐户(公司:公司)创建一个新帐户
4

2 回答 2

0

根据您描述的错误,我认为 Grails 确定错误:您转入 Account 的公司被确定为 my.clazz.Company,而不是 my.classes.domain.Company。

您可以进行简单的检查以确定company引导程序中的类型:

import java.lang.Class;
...
println company.getClass().getName()
于 2011-05-10T03:57:45.593 回答
0

除了使问题难以确定的代码中的各种拼写错误之外,问题似乎在于您正在尝试使用 my.class.domain 设置类型为 my.class.Company 的 Account.company 属性。公司类型。您的引导程序需要更改为:

import my.class.Company
import my.class.Account

Company company = new Company
Account acccount = new Account(company: company)

请注意,公司的正确导入声明。

于 2011-05-09T12:50:52.800 回答