パスワードの更新に使用している Grails コマンド オブジェクトがあります。次のようになります。
class UpdatePasswordCommand {
String password
static constraints = {
password blank: false,
nullable: false,
size: 8..64,
matches: someLongRegex
validator: { String password, command ->
if (someService.isPasswordSameAsUsername(password)) {
return 'password.invalid.sameasuser'
}
}
私が尋ねている質問に関係のないものはすべて省略しました。
私が直面している問題は、この検証がトリガーされるたびに、すべての検証がトリガーさcommand.errors
れ、検証の失敗ごとにコレクションにエラーメッセージが表示されることです。これは、たとえば、ユーザーがパスワードにtestを使用しようとすると、次のエラー メッセージが表示されることを意味します。
* Password length must be between 8 and 64 characters.
* Password must not be the same as the user name.
* Password must contain at least one special character, uppercase letter, and digit.
この場合、パスワードの長さが間違っている場合は、その時点で検証を停止したいと考えています。同様に、ユーザー名と同じ場合、正規表現と照合したくありません。特定のプロパティの最初の検証失敗のみを返すように Grails 検証を取得する方法はありますか? プロパティごとにのみ停止することが重要であることに注意してください。たとえば、ユーザーが確認パスワードを入力しない場合でも、2 つのエラー メッセージを表示したいからです。
* Password length must be between 8 and 64 characters.
* You must enter a confirm password.