Forms Spring表单验证问题
我正在用spring编写一个web应用程序,但在表单验证方面遇到了问题。这是我第一次使用它,所以我仍然需要理解它 基本上,我有一个具有表单处理方法的控制器,即:Forms Spring表单验证问题,forms,spring-mvc,Forms,Spring Mvc,我正在用spring编写一个web应用程序,但在表单验证方面遇到了问题。这是我第一次使用它,所以我仍然需要理解它 基本上,我有一个具有表单处理方法的控制器,即: @RequestMapping(params = "action=gestprodotti") public ModelAndView doGestProdotti( @RequestParam(value = "page", required = false, defaultValue = "0") i
@RequestMapping(params = "action=gestprodotti")
public ModelAndView doGestProdotti(
@RequestParam(value = "page", required = false, defaultValue = "0") int page,
@RequestParam(value = "activity", required = false) String activity,
@ModelAttribute Prodotto prod, BindingResult bindresult,
HttpSession session) throws Exception {
控制器带有注释,不扩展任何内容。在方法的后面,在接收绑定到表单的对象后,我执行以下操作:
Validator valid = activityHandler.getValidator();
valid.validate(backingObject, bindresult);
if (bindresult.hasErrors()){
return handleRequest(action, ACTIVITY_NEW_ITEM, jspComponent,
page, itemId, backingObject, bindresult, appstatus);
}
这意味着我手动调用验证器并返回相同的表单页面(ModelAndView结果)
验证程序代码:
public static final class ProdottoValidator implements Validator{
@Override
public boolean supports(Class<?> other) {
return Prodotto.class.isAssignableFrom(other);
}
@Override
public void validate(Object obj, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "codice", "Il codice è richiesto");
}
}
公共静态最终类ProdottoValidator实现验证器{
@凌驾
公共布尔支持(类其他){
返回Prodotto.class.isAssignableFrom(其他);
}
@凌驾
公共无效验证(对象对象,错误){
ValidationUtils.rejectIfEmptyOrWhitespace(错误,“codice”,“Il codiceèrichiesto”);
}
}
以及相关的JSP代码:
<td colspan="2" align="left">Codice<form:input id="code"
path="codice" /><form:errors path="codice" /></td>
Codice
这对于绑定很好,但我没有得到任何错误。我没有创建任何messages.properties文件,但我想我还是应该看到一些东西。检测到错误是因为
bindresult.hasErrors()
提供了true,但呈现的html没有显示任何形式的错误。我是否缺少配置之类的东西?是因为没有messages.properties文件,所以它不能工作吗?如果没有任何messages.properties文件,我希望日志中会出现错误消息,因为它在代码“Il codice e richiesto”下找不到任何消息。这是模型属性名称不匹配的典型症状
模型属性名称应在三个位置相同:
元素中。这里的默认名称是command
,可以使用modeldattribute
属性配置它(或者commandName
,这是一样的)doGestProdotti
。默认名称被推断为参数类名,第一个字母为无头(prodotto
)。您可以使用@modeldattribute(“…”
)显式指定名称prodotto
配置为点(1)和(2)中的模型属性名称
默认值应该是文档中所说的“command”。正如您所说,使用prodotto会导致绑定错误。你确定吗?@modeldattribute没有name属性,我得到一个错误。表单中的prodotto:表单破坏绑定并导致异常。。。
<form:form modelAttribute = "prodotto" ...>
....
<form:errors path="codice" />
...
</form:form>
@ModelAttribute("command") Prodotto prod