使用jQuery插件显示Spring验证错误

时间:2014-04-05 05:01:28

标签: java jquery spring-mvc spring-validator

我能够使用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 个答案:

答案 0 :(得分:2)

您没有提及您正在使用的视图技术。我假设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>

可以找到一个工作示例here