Отобразить ошибку валидации 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>

Рабочий пример можно найти здесь.

Другие вопросы по тегам