Spring 3.1 MVC - 表单处理工作流程的最佳实践

时间:2012-02-16 15:23:36

标签: spring spring-mvc

目前我正在尝试了解Spring MVC 3.1中表单提交/验证/错误处理的正确工作流程。不,我有一些问题。

  1. 保留表单错误的正确方法是什么,通过重定向绑定模型(有内置方式 - 我还没找到)
  2. 我知道我可以使用Spring表单标签和JSR 303来验证(包括i18n消息)提交的表单值。但是,处理给定值时处理错误的正确方法是什么? (例如注册是不可能的 - 电子邮件已经注册)从Struts或非java框架我知道类似ActionErrors。在Spring MVC中执行此操作的正确方法是什么?
  3. 通过“form:errors”标记迭代表单错误的正确方法是什么?我只是想显示错误列表。

2 个答案:

答案 0 :(得分:4)

参考文件:

1。)使用RequestContextUtils中的FlashMap属性。

2)。 当使用MVC命名空间时,假设JSR-303实现在类路径上可用,则自动配置JSR-303验证器。任何ConstraintViolations将自动作为标准Spring MVC表单标签可渲染的BindingResult中的错误公开。

3.使用path =“*”列出所有错误

<form:form>
      <form:errors path="*" cssClass="errorBox" />
      <table>
          <tr>
              <td>First Name:</td>
              <td><form:input path="firstName" /></td>
              <td><form:errors path="firstName" /></td>
          </tr>
          <tr>
              <td>Last Name:</td>
              <td><form:input path="lastName" /></td>
              <td><form:errors path="lastName"  /></td>
          </tr>
          <tr>
              <td colspan="3">
                  <input type="submit" value="Save Changes" />
              </td>
          </tr>
      </table>
  </form:form>

答案 1 :(得分:1)

1)在Spring 3.1中,您可以使用RedirectAttributes。它们专为Post / Redirect / Get screnario设计。你可以在这里看到一个很好的例子:Spring - Redirect after POST (even with validation errors)

2)我认为JSR-303验证器意味着简单,自立,并且彼此独立。虽然有可能以他们访问其他持久性实体等方式编写它们 - 但这不是最佳实践。我亲自检查控制器中的重复电子邮件。如果电子邮件已经存在 - 我将新的FieldError添加到BindingResult。