我与编写JSP文件的前端开发人员合作。我们有一个正常工作的表单,除了使用Spring的<form:errors/>
标记似乎无法显示验证/绑定/处理错误。
我已经确认错误正在设置,显然错误的路径是正确的。据推测,<form:errors path="*" />
应该全部呈现它们,无论路径如何,但它都没有显示任何内容。
我是否需要进入标记库源以推断出哪些内容出错?
答案 0 :(得分:16)
我发现的两件事。
1)确保在表单标记
中指定form-bean / command对象的名称<form:form method="post" enctype="multipart/form-data" commandName="salesOrder">
2)确保按类名命名form-bean / command对象。在上面的例子中,我的类是com.abc.xyz.SalesOrder。如果我在模型中将其称为“so”或“order”,那么它将不会显示错误。
答案 1 :(得分:14)
简单回答:&lt; form:errors /&gt;必须在&lt; form:form /&gt;范围内元素,以便绑定到模型的“命令”对象。
答案 2 :(得分:3)
问题 - 为什么“form:error path =”xyzProperty“不会在jsp上打印错误?
Anserwer -
BindingResult确实有objectName属性,它在jsp中使用commandName绑定错误列表。
Defualt objectName =您的对象名称。例如,如果类名是MyCareerFB,则objectName = myCareerFB。注意小写的第一个字符,它遵循bean命名约定。
保持jsp中的commandName值与objectName相同,否则错误不会与对象绑定,jsp将永远不会打印错误消息。
答案 3 :(得分:2)
这只是为了后人的缘故,看到答案已被接受。我自己有相同的症状,但问题是我的形式:form方法属性值区分大小写:即method =“post”不会显示错误,而method =“POST”将正常工作。特别值得注意的是,一切都按预期工作 - 表单视图显示为预期,因为验证失败 EXCEPT 错误在最终JSP中不可见。
此行为将存在于任何扩展AbstractFormController的控制器上,因为
protected boolean isFormSubmission(HttpServletRequest request)
执行“POST”.equals而不是“POST”.equalsIgnoreCase。
答案 4 :(得分:1)
不知道我是否有同样的问题。我的问题是我为@ModelAttribute设置了错误的值。将值设置为&lt; form:form /&gt;的commandName工作良好。
答案 5 :(得分:0)
您可能没有对commandName表单属性使用正确的命名约定。那是我遇到的问题。我有一个名为&#34; XYZTask&#34;我将表单命名为commandName =&#34; xyztask&#34;。除了我没有看到标签报告的错误之外,所有表单映射都有效。我将我的课程重命名为&#34; XyzTask&#34;和命令形式commandName =&#34; xyzTask&#34;,错误开始有效。