当我尝试提交注册表单以检查使用 jsp 的 Spring MVC 应用程序中的匹配密码条目时,我收到以下错误消息:
org.springframework.context.NoSuchMessageException:
No message found under code 'Passwords must match.' for locale 'en_US'.
注册表单有一个password
字段和一个passwordtest
字段,以确保用户没有输入错误。换句话说,要求用户输入他们请求的新密码两次,以便服务器可以在将新用户密码保存到数据库之前确认两次尝试都匹配。
我如何更改下面的代码,以便 Spring 执行服务器端验证以确认用户的两次密码尝试相同,并在它们不相同时向 View 发送有用的警报消息?
这两个字段的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" />
但是,请注意,当用户将密码字段留空时,这行代码确实会成功打印错误。所以我认为问题在于需要添加其他内容。
最佳答案
你的错误是全局错误,不是字段错误。如果它们已填写但不匹配,您怎么知道哪个字段是错误的? :)
使用errors.reject("", "密码必须匹配");
在您的 JSP 中,为全局错误添加一个区域:
<spring:hasBindErrors name="nameOfYourModelAttribute">
<c:if test="${errors.globalErrorCount > 0}">
<div class="alert alert-danger"><form:errors/></div>
</c:if>
</spring:hasBindErrors>
关于java - 检查 spring mvc 注册表中的两个密码条目是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446051/