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