Подтвердить что ты не робот

Spring 3 MVC - форма: ошибки, не показывающие ошибки

Я использую проверку на основе аннотаций, но для одной из форм я не могу показать никаких ошибок с помощью тега 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"/>

Ничего не работает.

4b9b3361

Ответ 1

Мне пришлось использовать @ModelAttribute, чтобы заставить это работать. Таким образом, форме предшествует @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)

Ответ 2

Еще один подход. Если по какой-то причине вы не можете использовать @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";
}

Ответ 3

Я столкнулся с той же проблемой.

Мне пришлось использовать @ModelAttribute("attributeName"), чтобы вернуть ошибку проверки.

Ответ 4

Я не уверен, почему и я много страдал, пока не понял, но вы должны называть свой 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">