Grailsでカスタムバリデーターを作成し、カスタム文字列をビューとエラーメッセージに戻すにはどうすればよいですか?
たくさんの人が同じように立ち往生しているのを見たので、それに対処するための質問と回答を作成することにしました。
_@grails.validation.Validateable
class PeopleCommand {
String firstName
String lastName
String emailAddress
String idNumber
static constraints = {
firstName (blank: false)
lastName (blank: false)
emailAddress (blank: false)
idNumber (blank: false, size: 13..16, validator: {value, object ->
if (!value.startsWith('77')) return false;
})
}
}
_
これにより、入力したidNumberが77で始まるかどうかがチェックされます。そうでない場合は、エラーが送信されます。次の質問、エラーをどのように表示しますか?
_<div class="${hasErrors(bean:person,field:'idNumber','error')}">
<label class="control-label">Identity Number</label>
<input value="${fieldValue(bean:person,field:'idNumber')}" name="idNumber" type="text"/>
<div class="error-messages">
<g:renderErrors bean="${command}" as="list" field="idNumber"/>
</div>
</div>
_
上記の例では、人物モデルオブジェクトのidNumberフィールドにエラーがある場合、${hasErrors(bean:person,field:'idNumber','error')}
は文字列error
をhtmlクラスに追加します。このクラスを使用して、入力のスタイルを設定し、_div.error-messages
_ブロックを表示および/または非表示にすることができます。 _<g:renderErrors bean="${command}" as="list" field="idNumber"/>
_は恐ろしいエラーメッセージを表示します。
[〜#〜] important [〜#〜]:Grailsでは、ビューに直接メッセージを送信することはできません。代わりに、/ i18n/messages.properties(メッセージバンドル)でメッセージを宣言する必要があります。好きなキーを使用できます。
Messages.properties内
_validation.idStartsWith77=Your ID number must start with 77
_
バリデーターで
_idNumber (blank: false, size: 13..16, validator: {value, object ->
return 'validation.idStartsWith77'
})
_
これにより、referenceがビューに渡され、messages.propertiesのカスタムメッセージがポイントされます。
これは、特にnot多言語Webサイトを開発している人々にのみ適用されます。
Grailsを使用すると、カスタムパラメータをパーサーに渡すことができます。メッセージファイル内でこれらのカスタムパラメータを参照できます。システムをごまかすために、メッセージ全体が1つのカスタムパラメータであるカスタムメッセージを作成できます。など:
Messages.properties内
_validation.customRuntimeMessage={3}
_
バリデーターで
_idNumber (blank: false, size: 13..16, validator: {value, object ->
return ['validation.customRuntimeMessage', 'You need to start your ID with 77']
})
_
カスタム検証を行う代わりに、カスタム制約を作成してGrailsに接続することもできます。
http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/