Проблемы с проверкой формы Spring - PullRequest
0 голосов
/ 04 февраля 2011

Я пишу веб-приложение с весны, и у меня проблемы с проверкой форм. Это первый раз, когда я использую это, поэтому я все еще должен понять это ...

В основном у меня есть контроллер с методом обработки формы, который:

@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");           
        }

    }

и соответствующий код JSP:

<td colspan="2" align="left">Codice<form:input id="code"
                path="codice" /><form:errors path="codice" /></td>

, который отлично работает для привязки, но я не получаю никакой ошибки. Я не создал ни одного файла messages.properties, но, думаю, мне все равно нужно что-то увидеть. Ошибки обнаруживаются, потому что bindresult.hasErrors() дает true, но отображаемый html ничего не показывает вместо формы: ошибки. Я пропускаю что-то вроде конфигурации или что-то еще? Это потому что нет файла messages.properties, что он не работает?

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

Это типичный признак несоответствия имени атрибута модели.

Имя атрибута модели должно совпадать в трех местах:

  1. В методе настройки формы, где выпоместите начальное состояние объекта формы в модель.

  2. В <form:form> элемент страницы JSP.Имя по умолчанию здесь command, его можно настроить с помощью атрибута modelAttribute (или commandName, это то же самое).

  3. В методе обработки формы, например, doGestProdotti.Имя по умолчанию выводится как имя класса аргумента с декапитализированной первой буквой (prodotto в вашем случае).Вы можете указать имя явно с помощью @ModelAttribute("...").

Несоответствие между точками (2) и (3) приводит к тому, что ошибки проверки не отображаются.Несоответствие между точками (1) и (2) приводит к ошибкам привязки при отображении формы.

Итак, вам нужно либо настроить prodotto в качестве имени атрибута модели в точках (1) и (2)

<form:form modelAttribute = "prodotto" ...>
    ....
    <form:errors path="codice" />
    ...
</form:form>

или настройте command в качестве имени атрибута в точке (3)

@ModelAttribute("command") Prodotto prod
0 голосов
/ 04 февраля 2011

Если у вас нет файла messages.properties, я ожидаю, что в журналах появится сообщение об ошибке, поскольку оно не может найти ни одного сообщения под кодом «Il codice e richiesto».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...