我能够使用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;
}
答案 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。