7

我与编写 JSP 文件的前端开发人员一起工作。我们有一个工作正常的表单,除了验证/绑定/处理错误似乎无法使用 Spring 的<form:errors/>标签显示。

我已经确认正在设置错误,并且错误的正确路径显然是什么。据说<form:errors path="*" />应该将它们全部渲染,无论路径如何,但它什么也没显示。

我是否需要进入标签库源来推断出了什么问题?

4

6 回答 6

17

我发现了 2 件事。

1)确保在表单标签中指定了表单bean/命令对象的名称

<form:form method="post" enctype="multipart/form-data" commandName="salesOrder">

2) 确保你用它的类名来命名你的form-b​​ean/command 对象。在上面的示例中,我的类是 com.abc.xyz.SalesOrder。如果我在模型中将其称为“so”或“order”,则它不会显示错误。

于 2010-05-26T10:25:10.160 回答
15

简单的回答:<form:errors/> 必须在 <form:form/> 元素中才能绑定到模型的“命令”对象。

于 2009-09-05T17:39:33.970 回答
3

问题 - 为什么“form:error path="xyzProperty" 不会在 jsp 上打印错误?

答案——

  1. BindingResult 确实具有 objectName 属性,该属性将错误列表与您的 jsp 中的 commandName 绑定。

  2. 默认 objectName = 您的对象名称。例如,如果类名是 MyCareerFB,那么 objectName = myCareerFB。注意小写的第一个字符,它遵循 bean 命名约定。

  3. 保持 jsp 中的 commandName 值与 objectName 相同,否则错误不会与对象绑定,jsp 将永远不会打印错误消息。

于 2011-06-15T09:08:54.943 回答
2

这只是为了后代,看到答案已经被接受。我自己也有同样的症状,但对我来说问题是 form:form 方法属性值区分大小写:即 method="post" 不会显示错误,而 method="POST" 可以正常工作。这里需要特别注意的是,一切都按预期工作——表单视图按预期显示,因为验证失败,除了错误在最终 JSP 中不可见。

这种行为将存在于任何扩展 AbstractFormController 的控制器上,因为

protected boolean isFormSubmission(HttpServletRequest request)

执行“POST”.equals 而不是“POST”.equalsIgnoreCase。

于 2011-01-04T22:32:22.300 回答
1

不知道我有没有同样的问题。我的问题是我为@ModelAttribute 设置了错误的值。将值设置为 <form:form /> 的 commandName 可以正常工作。

于 2010-11-19T20:22:10.997 回答
0

您可能没有为 commandName 表单属性使用正确的命名约定。这就是我遇到的问题。我有一个名为“XYZTask”的类,并将表单命名为 commandName="xyztask"。除了我没有看到标签报告的错误之外,所有表单映射都有效。我将我的课程重命名为“XyzTask”和形式 commandName="xyzTask",错误开始起作用。

于 2015-02-26T18:56:17.193 回答