1

我能够验证表单并使用 Spring 表单标记显示 Spring 验证错误。我如何使用 jQuery Noty 插件显示这些错误,而不是显示为 HTML 标记?

控制器:

   @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;
}
4

1 回答 1

3

你没有提到你正在使用哪种视图技术。我假设它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>

可以在此处找到一个工作示例。

于 2014-04-05T08:10:40.660 回答