Отобразить ошибку валидации Spring с плагином jQuery
Я могу проверить форму и отобразить ошибку проверки Spring с помощью тега формы Spring. Вместо отображения в виде HTML-разметки, как я могу отобразить эти ошибки с помощью плагина jQuery Noty?
контроллер:
@RequestMapping(value = "/Register", method = RequestMethod.POST)
public ModelAndView Registeruser(@ModelAttribute("registerBean") @Valid RegisterBean registerBean, BindingResult bindingResult) {
ModelAndView mv = new ModelAndView();
if (bindingResult.hasErrors()) {
mv.setViewName("index");
mv.addObject(registerBean);
} else {
boolean registered = userservice.RegisterUser(registerBean);
if (registered) {
List<SimpleGrantedAuthority> authList = new ArrayList<SimpleGrantedAuthority>(1);
authList.add(new SimpleGrantedAuthority("ROLE_USER"));
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(registerBean.getEmail(), registerBean.getPassword(), authList);
SecurityContextHolder.getContext().setAuthentication(auth);
mv.setViewName("auth/Home");
} else {
mv.setViewName("index");
}
}
return mv;
}
1 ответ
Вы не упомянули, какую технологию просмотра вы используете. Я предполагаю что JSP
используется
Сначала вы должны отобразить любое сообщение об ошибке в отдельный скрытый контейнер. В этом примере продукт мой modelAttribute
, Это полностью зависит от вас, что вы показываете своим пользователям в случае ошибки. В этом примере будет показан неупорядоченный список типов проверки для свойства и сообщения проверки.
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<s:hasBindErrors name="product">
<div id="error-noty" style="display:none;">
<h3>You have errors in your input!</h3>
<ul>
<c:forEach items="${errors.fieldErrors}" var="error">
<li>${error.codes[1]} ${error.defaultMessage}</li>
</c:forEach>
</ul>
</div>
</s:hasBindErrors>
Затем вы должны инициализировать noty
только если контейнер с селектором #error-noty
можно найти на странице. Передайте HTML из скрытого контейнера в noty
и вы сделали.
<script>
var errors = $('#error-noty');
if(errors.html()) {
noty({text: errors.html()});
}
</script>
Рабочий пример можно найти здесь.