Spring表单:错误定制

时间:2012-12-18 18:34:37

标签: forms spring spring-mvc error-handling

我正在尝试实现自己的表单:errors标记,或将其包装在自定义标记上。 我想这样做的原因是自定义消息,显示一些图标等。 我不确定<form:errors />是否足够用于此目的。

我找到了可以替换<form:errors path="foo" />

的代码片段
<spring:bind path="foo">
  <c:if test="${status.error}">
    <img src="<c:url value="/resources/images/warning.png"/>" 
       width="31" height="32" class="error_tooltip" title="${status.errorMessage}" />
  </c:if>
</spring:bind>
顺便说一句......如果有人可以解释,我不知道这是如何运作的。我试图将该代码放在自定义标记(标记文件)中,但是:
javax.servlet.jsp.JspTagException:BindingResult和bean名称'form'的普通目标对象都不可用作请求属性
有什么建议吗?

PS。我还想找到一个用ajax请求返回反馈的解决方案。我不确定JSONize BindingResult对象是否是一个很好的解决方案,所以我将可以创建自己的“反馈”对象。
如果<form:error/>标记无法帮助我进行自定义,那么对正常请求和ajax请求使用“反馈”对象会更好(使用模型传递给JSP,或者使用jj响应来执行ajax)。

修改 这是我的标签代码:

<%@attribute name="name" required="true" %>

<spring:bind path="${name}">
  <c:if test="${status.error}">
    <img src="<c:url value="/resources/images/warning.png"/>" 
       width="31" height="32" class="error_tooltip" title="${status.errorMessage}" />
  </c:if>
</spring:bind>

1 个答案:

答案 0 :(得分:1)

是使用标记<form:errors>进行自定义表单验证。要使此标记生效,您需要在控制器中使用BindingResult:

@RequestMapping(value="/save",method=RequestMethodPOST)
public String save(@Valid Bean yourBean, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "/create"; // your form
    } else {
        yourBean= beanService.save(yourBean);
        return "redirect:/view/" + yourBean.getId(); // other action  
    } 
}

您可以阅读form validation customization上的优秀教程。