0

更新: クラスなどに関するいくつかの間違った仮定を作成しました。「デモ」プロジェクトがある場合、次のことが発生します。

「Company」という名前の 2 つのクラスがあります。

  • 1 つは grails-app/domain/my.classes.domain.Company に配置されます
  • もう 1 つは src/groovy/my.clazz.Company にあります。

最後のものには @Validateable アノテーションがあり、Config.groovy には grails.validateable.packages = ['my.clazz'] が含まれています

また、grails-app/domain/my.classes.domain.Account に 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] の値をプロパティ 'company' の必要なタイプ [my.classes.domain.Company] に変換できません: 一致するエディターまたは変換戦略が見つかりません
    ... 33 以上
原因: java.lang.IllegalStateException:
プロパティ 'company' のタイプ [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. グルーヴィーなクラスを作成します: my.clazz.Company
  5. このグルーヴィーなクラスに Validatable アノテーションを付与してください。
  6. my.clazz パッケージを検証可能なパッケージに追加します
  7. ブートストラップで、新しいアカウント (会社:会社) で新しいアカウントを作成します。
4

2 に答える 2

0

あなたが説明したエラーによると、Grails が間違って判断したと思います。アカウントに転送する会社は、my.classes.domain.Company ではなく、my.clazz.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)

Company の正しい import ステートメントに注意してください。

于 2011-05-09T12:50:52.800 に答える