私は grails 2.2.1 を使用しており、ネストされたコマンド構造を検証しようとしています。これが私のコマンドオブジェクトの簡略化されたバージョンです:
@Validateable
class SurveyCommand {
SectionCommand useful
SectionCommand recommend
SurveyCommand() {
useful = new SectionCommand(
question: 'Did you find this useful?',
isRequired: true)
recommend = new SectionCommand(
question: 'Would you recommend to someone else?',
isRequired: false)
}
}
@Validateable
class SectionCommand {
String question
String answer
boolean isRequired
static constraints = {
answer(validator: answerNotBlank, nullable: true)
}
static answerNotBlank = { String val, SectionCommand obj ->
if(obj.isRequired) {
return val != null && !val.isEmpty()
}
}
}
インスタンスを検証しようとすると、セクションの値に関係なくSurveyCommand
常に返され、 ( )true
内のカスタム バリデータは呼び出されません。grails のドキュメントから、この種のネストされた構造がサポートされているようです(デフォルトは true です)。しかし、このルールはドメイン オブジェクトにのみ適用され、コマンド オブジェクトには適用されないのではないでしょうか? それとも、ここで何かが足りないのですか?SectionCommand
answerNotBlank
deepValidate