Как Spring MVC получает данные из Model и почему объект modelAttribute создается каждый раз после отправки формы? - PullRequest
0 голосов
/ 01 мая 2020

Каждый раз, когда я отправляю форму с ошибками, вызывается метод processForm (), ошибки проверяются, BindingResult hasErrors () имеет значение true, и я возвращаю клиентскую форму с сообщением об ошибке рядом с неправильными входными данными, но перед тем, как всегда создается новый клиент. и сеттеры называются. Почему Spring создает новый объект Customer каждый раз, когда я отправляю форму, и как долго Spring хранит данные клиента? Кроме того, почему мои поля ввода становятся пустыми, если я отмечаю URL в браузере и нажимаю клавишу ввода?

У меня есть форма:

<form:form action="processForm" modelAttribute="customer">
    First name: <form:input path="firstName" />
    <form:errors path="firstName" cssClass="error" />
    <br><br>
    Last name (*): <form:input path="lastName" />
    <form:errors path="lastName" cssClass="error" />
    <br><br>
    <input type="submit" value="Submit" />
</form:form>

и контроллеры:

    @RequestMapping("/showForm")
    public String showForm(Model theModel) {
        theModel.addAttribute("customer", new Customer());
        return "customer-form";
    }

    @RequestMapping("/processForm")
    public String processForm(
            @ModelAttribute("customer") @Valid Customer theCustomer,
            BindingResult theBindingResult) {
       if (theBindingResult.hasErrors()) return "customer-form";
        return "customer-confirmation";
    }

1 Ответ

0 голосов
/ 02 мая 2020

Почему Spring создает новый объект Customer каждый раз, когда я отправляю форму, и как долго Spring хранит данные клиента?

Вообще говоря, Spring не создает нового Customer возражать каждый раз, когда вы отправляете форму. Это привязка данных формы к объекту модели, который вы отправили из обработчика GET:

theModel.addAttribute("customer", new Customer());

И в обработчике POST этот же объект разрешается с помощью

@ModelAttribute("customer") @Valid Customer theCustomer,

Посмотрите, как это разрешение выполняется с помощью @ModelAttribute в документации Spring Framework.

Обычно данные поступают через запросы, если не настроено иначе, например, с @SessionAttributes.

Кроме того, почему мои поля ввода становятся пустыми, если я отмечаю URL в браузере и нажимаю клавишу ввода?

Это новый GET запрос, ie, все так же, как в первый раз, когда вы вводите URL и нажимаете ввод!

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