Spring 标记窗体在 jsp 中不显示验证错误



我正在编写一个带有用户注册的页面。面临验证错误形式的显示问题

我的控制器:

@Controller
public class UIController {
private final Logger log = LoggerFactory.getLogger(getClass());
@Autowired
private UserService service;
@Autowired
private SecurityService securityService;
@Autowired
private UserValidator validator;
@PostMapping(value = "/login")
public String signIn(@ModelAttribute("userForm") UserTo userForm, BindingResult bindingResult, Model model) {
validator.validate(userForm, bindingResult);
User user = service.findByLogin(UserUtil.createNewFromTo(userForm).getLogin());
if (!userForm.getPassword().equals(user.getPassword())) {
log.info("invalid password {}", user);
return "redirect:/login";
}
log.info("signIn {}", user);
securityService.autologin(user.getLogin(), user.getPassword());
return "redirect:/welcome";
}
}

我的验证人:

@Component
public class UserValidator implements Validator {
@Autowired
private UserRepositoryImpl userRepository;
@Override
public boolean supports(Class<?> aClass) {
return UserTo.class.equals(aClass);
}
@Override
public void validate(Object o, Errors errors) {
UserTo user = (UserTo) o;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "login", "NotEmpty");
if (user.getLogin().length() < 6 || user.getLogin().length() > 32) {
errors.rejectValue("login", "Size.userForm.login");
}
if (userRepository.findByLogin(user.getLogin()) != null) {
errors.rejectValue("login", "Duplicate.userForm.login");
}
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotEmpty");
if (user.getPassword().length() < 8 || user.getPassword().length() > 32) {
errors.rejectValue("password", "Size.userForm.password");
}
}
}

我的 jsp 表格 :

<div id="wrapper">
<!--SLIDE-IN ICONS-->
<div class="user-icon"></div>
<div class="pass-icon"></div>
<!--END SLIDE-IN ICONS-->
<!--LOGIN FORM-->
<form:form name="login-form" modelAttribute="userForm" class="login-form" method="post" id="form">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<!--CONTENT-->
<div class="content">
<!--USERNAME-->
<spring:bind path="login">
<div class="form-group ${status.error ? 'has-error' : ''}">
<form:input name="login" id="login" type="text" path="login" class="input username"
placeholder="Login"></form:input>
<form:errors path="login"></form:errors>
</div>
</spring:bind>
<!--END USERNAME-->
</div>
<!--END CONTENT-->
<!--FOOTER-->
<div class="footer">
<button class="button" type="submit">Login</button>
<button class="register" type="button" name="submit" onclick=" register_url('${contextPath}/registration')">
Register
</button>
</div>
<!--END FOOTER-->
</form:form>
</div>

在发送 POST 请求时在 chrome 中进行调试时,会出现 302 HTTP 错误。 因此,如果我在控制器中设置断点,则不会处理调试。

告诉我可能有什么问题?

jsp 中的 "form" 标记没有 "action" 属性。

不应在出现错误时重定向,因为重定向将擦除绑定结果。而是做:

if (!userForm.getPassword().equals(user.getPassword())) {
log.info("invalid password {}", user);
return "login";
}

最新更新