2

このエラーの奇妙な点は、ページでエラーが発生する場合と発生しない場合があることです。何が原因なのか、その理由がわかりません:

errors.GrailsExceptionResolver ClassCastException occurred when processing request: [GET] /birthFamily/aboutYouLifestyle
java.util.LinkedHashMap cannot be cast to groovy.lang.Closure. Stacktrace follows:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to groovy.lang.Closure
    at com.nrfa.LifestyleCommand$__clinit__closure1.doCall(Wizard.groovy:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

問題のあるコマンド オブジェクト:

@Validateable
public  class LifestyleCommand {
    Integer applicantNumber;
    Smoke smoke
    Drink drink
    Occupation occupation
    Set <String> hobby
    String occupationDetails

    static constraints = {
        importFrom Applicant, include:["smoke", "drink", "occupation", "occupationDetails", "applicantNumber"]
    }
}

スタック トレースの 302 行目は、コマンド オブジェクト制約の「importFrom Applicant」行です。「java.util.LinkedHashMap は groovy.lang.Closure にキャストできません」は何を示していますか?

Applicant ドメインで見つかったもののコピーとして制約を置き換えると、それも正常に機能します。

static constraints = {

    applicantNumber (blank:false, nullable:false, range:1..2)
    smoke (blank:true, nullable:true)
    drink (blank:true, nullable:true)
    occupation (blank:true, nullable:true)
    occupationDetails (blank:true, nullable:true, maxSize:150)
}

編集:

ドメインオブジェクトである申請者の関連部分は次のとおりです。

class Applicant {

    static hasMany = [hobby:Hobby, ethnicity:Ethnicity]

    Integer applicantNumber
    String gender
    Integer yearBorn
    EyeColor eyeColor
    HairColor hairColor
    Integer heightFeet
    Integer heightInches

    static constraints = {
        applicantNumber (blank:false, nullable:false, range:1..2)
        gender (blank:true, nullable:true, validator: { value ->
            if (value != null && value != '' && (value != "M" && value != "F")) {
                return 'applicant.invalid.gender'
            }
        })
        yearBorn (blank:true, nullable:true, validator: { value ->
            if (value != null && (value < 1920 || value > 2014)) {
                return 'applicant.invalid.yearBorn'
            }
        })
        eyeColor (blank:true, nullable:true)
        hairColor (blank:true, nullable:true)
        smoke (blank:true, nullable:true)
        drink (blank:true, nullable:true)
        heightFeet (blank:true, nullable:true, validator: { value ->
            if (value != null && (value < 3 || value > 7)) {
                return 'applicant.invalid.heightFeet'
            }
        })
        heightInches (blank:true, nullable:true, validator: { value ->
            if (value != null && (value < 1 || value > 12)) {
                return 'applicant.invalid.heightInches'
            }
        })
    }
}

ウィザードは私のコントローラーです。LifestyleCommand オブジェクトに入力するデータを送信するフォーム リクエストを処理するアクションがあります。どのフィールドも入力されていない状態でページを送信しているだけなので、すべてが有効な null/空です。

私はgrails 2.2.4を実行しています

4

1 に答える 1