jsp を使用して Spring MVC アプリで一致するパスワード エントリを確認するために登録フォームを送信しようとすると、次のエラー メッセージが表示されます。
org.springframework.context.NoSuchMessageException:
No message found under code 'Passwords must match.' for locale 'en_US'.
登録フォームには、ユーザーがタイプミスをしていないことを確認するためpassword
のフィールドとフィールドがあります。passwordtest
つまり、新しいユーザーのパスワードがデータベースに保存される前に、サーバーが両方の入力が一致することを確認できるように、ユーザーは要求された新しいパスワードを 2 回入力するよう求められます。
以下のコードを変更して、Spring がサーバー側の検証を実行して、ユーザーの 2 回のパスワードの試行が同一であることを確認し、同一でない場合は有用なアラート メッセージをビューに送信するにはどうすればよいですか?
2 つのフィールドの jsp コードは次のとおりです。
<tr>
<td>
<spring:bind path="password">
<table>
<tr>
<td>${pwdtest}
<label class="col-sm-2 control-label">Password</label>
<form:errors path="password" class="form-error" />
</td>
</tr>
<tr>
<td>
<form:input path="password" type="password" id="password" name="password" />
</td>
</tr>
</table>
</spring:bind>
</td>
<td>
<spring:bind path="passwordtest">
<table>
<tr>
<td>${pwdtest}
<label class="col-sm-2 control-label">Repeat Password</label>
</td>
</tr>
<tr>
<td>
<form:input path="passwordtest" type="password" id="passwordtest" name="passwordtest" />
</td>
</tr>
</table>
</spring:bind>
</td>
</tr>
問題newUserFormValidator.java
は、次のコードを持つクラスにあるようです。
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import my.app.model.UserCandidate;
@Component
public class NewUserFormValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return UserCandidate.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
UerCandidate cand = (UserCandidate) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "field.required", "Email Address is a required field.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required", "Password is a required field.");
if(!cand.getPassword().equals(cand.getPasswordtest())){
errors.rejectValue("password", "Passwords must match.");
}
}
}
スタック トレースが指す jsp 内のコード行は次のとおりです。
<form:errors path="password" class="form-error" />
ただし、このコード行は、ユーザーがパスワード フィールドを空のままにしておくと、エラーを正常に出力することに注意してください。したがって、問題は、何か他のものを追加する必要があることだと思います。