0

我正在尝试实现我自己的 form: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”的普通目标对象都不能用作请求属性有
什么建议吗?

附言。我还想找到一个解决方案来返回带有 ajax 请求的反馈。我不确定 JSONize BindingResult 对象是否是一个好的解决方案,所以我将适当地创建自己的“反馈”对象。
如果<form:error/>标签无法帮助我进行自定义,最好将“反馈”对象用于普通请求和 ajax 请求(使用模型传递到 JSP 或 ajax 的 JSON 响应)。

编辑: 这是我的标签代码:

<%@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>
4

1 回答 1

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  
    } 
}

您可以阅读有关表单验证自定义的优秀教程。

于 2012-12-18T20:12:11.380 回答