2

環境:Grails 2.0.4、Java 1.6.0

10進値が入力されないように、整数値を必要とするドメインオブジェクト値に制約を設定したいと思います。ビューに3.3と入力すると、オブジェクトは3の値で作成されます。整数値のみが有効であることを示す検証エラーがユーザーにキックバックされることを期待していました。

class ADomainObject {
    Integer    anInteger
}

コントローラ

def save() {
   // Note: params["anInteger"] = "3.3"

   ADomainObject aDomainObject = new ADomainObject(params)
   aDomainObject.save flush:true
}

結果としてaDomainObject.anInteger=3が永続化されます

失敗を引き起こすにはどのような種類の制約が必要ですか?範囲制約[0..1000]を使用してみましたが、役に立ちませんでした。

4

2 に答える 2

5

カスタムプロパティエディタを登録してIntegers、厳密に整数値のみを許可することができます。以下は、すべての整数のバインドに適用されます。

class IntegerEditor extends java.beans.PropertyEditorSupport {
    void setAsText(String text) {
        value = Integer.parseInt(text)
    }
}

class CustomPropertyEditorRegistrar implements org.springframework.beans.PropertyEditorRegistrar {
    void registerCustomEditors(org.springframework.beans.PropertyEditorRegistry registry) {
        registry.registerCustomEditor(Integer, new IntegerEditor())
    }
}

そしてresources.groovyで:

beans = {
    customPropertyEditorRegistrar(CustomPropertyEditorRegistrar)
}
于 2012-10-01T22:18:43.527 に答える
0

たぶん、あなたはこのようなカスタムバリデーターを使うことができます:

static constraints = {
        anInteger validator: {
            //aDomainObject. anInteger.invalid.type
            if (!(it instanceOf Integer)) return ['invalid.type']
        }
    }
于 2012-10-01T21:56:00.807 に答える