2

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" />

ただし、このコード行は、ユーザーがパスワード フィールドを空のままにしておくと、エラーを正常に出力することに注意してください。したがって、問題は、何か他のものを追加する必要があることだと思います。

4

1 に答える 1