web-dev-qa-db-ja.com

Spring 3 MVC-form:エラーがエラーを表示しない

注釈ベースの検証を使用していますが、フォームの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"/>

どちらも機能しません。

20
Eqbal

これを機能させるには、_@ModelAttribute_を使用する必要がありました。したがって、フォームの前には@ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)が付いていました。

42
Eqbal

もう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";
}
8
mokshino

私は同じ問題に直面しました。

@ModelAttribute("attributeName")を使用して、応答で検証エラーを取り戻す必要がありました。

5
Ahamed Mustafa

理由はわかりません。理解するまで多くの苦しみを味わいましたが、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">
1