Spring 3 MVC - форма: ошибки, не показывающие ошибки - PullRequest
19 голосов
/ 19 мая 2010

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

Ни то, ни другое не работает.

Ответы [ 4 ]

42 голосов
/ 28 мая 2010

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

8 голосов
/ 20 сентября 2012

Еще один подход, если по какой-то причине вы не можете использовать @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";
}
5 голосов
/ 20 декабря 2011

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

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

1 голос
/ 15 сентября 2016

Я не уверен, почему, и я много страдал, пока не понял, но вы ДОЛЖНЫ назвать свой боб в точности как класс бобов. Поэтому 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">
...