注釈ベースの検証を使用していますが、フォームの1つで、form:errors
タグを使用してエラーを表示できません。メソッドをデバッグすると、BindingResult
にエラーがあることがわかりますが、何らかの理由でフォームに表示されません。他のフォームで動作しているので困惑していますが、何らかの理由でこの特定のフォームに問題があります。どんなポインタでも大歓迎です。
これがコントローラーからのコードです。コントローラーにもcopyCartFormを@SessionAttributeとして持っています。
@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST)
public String copyCart(@Valid CopyCart copyCartForm, BindingResult result) {
if (result.hasErrors()) {
logger.debug("errors in form" + result.toString());
return "copyshoppingcart";
} else {
...
...
return "redirect:/home";
}
}
JSPで私はこれを試しました:
<form:errors path="*" cssClass="formError"/>
と同様:
<form:errors path="fieldName" cssClass="formError"/>
どちらも機能しません。
これを機能させるには、_@ModelAttribute
_を使用する必要がありました。したがって、フォームの前には@ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)
が付いていました。
もう1つのアプローチ、何らかの理由で使用時に@ModelAttribute("copyCartForm")
を使用できない場合は、次のようにします。
@RequestMapping(method=RequestMethod.POST)
public String post(@Valid CopyCart copyCartForm, BindingResult bindingResult, ModelMap modelMap) {
if (bindingResult.hasErrors()) {
modelMap.put(BindingResult.class.getName() + ".copyCartForm", bindingResult);
return "copyshoppingcart";
}
return "redirect:/home";
}
私は同じ問題に直面しました。
@ModelAttribute("attributeName")
を使用して、応答で検証エラーを取り戻す必要がありました。
理由はわかりません。理解するまで多くの苦しみを味わいましたが、Beanの名前をBeanクラスとまったく同じにする必要があります。したがって、copyCartFormは単にcopyCartである必要があります。
@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST)
public String copyCart(@Valid CopyCart copyCart, BindingResult result) {
if (result.hasErrors()) {
logger.debug("errors in form" + result.toString());
return "copyshoppingcart";
} else {
...
...
return "redirect:/home";
}
}
これは、フォームタグでも変更する必要があります。
<form:form action="....." method="..." commandName="copyCart">