Главная » Spring » Обработка данных формы Spring

0

Реализовав возможность отправки формы пользователем, мы должны создать метод-обработчик, принимающий объект Spitter (заполненный данными из формы) и сохраняющий его. И отобра- жающий страницу с настройками пользователя. В листинге 8.10 представлен метод addSpitterFromForm(), обрабатывающий данные из формы.

Листинг 8.10. Метод addSpitter обрабатывает данные формы

@RequestMapping(method=RequestMethod.POST)

public String addSpitterFromForm(@Valid Spitter spitter,

BindingResult  bindingResult)  {

if(bindingResult.hasErrors())  {                        // Проверка  ошибок

return "spitters/edit";

}

spitterService.saveSpitter(spitter);             // Сохранить  объект  Spitter return "redirect:/spitters/" + spitter.getUsername(); // Переадресовать

}                                                                                                                     // после  запроса  POST

Обратите внимание, что метод addSpitterFromForm() отмечен анно- тацией @RequestMapping, мало отличающейся от аннотации @Request- Mapping, украшающей метод createSpitterProfile(). Ни одна из них не определяет путь в URL, поэтому оба метода будут обрабаты- вать запросы для пути /spitters в URL. Разница состоит в том, что createSpitterProfile() обрабатывает GET-запросы, а addSpitterFrom- Form() обрабатывает POST-запросы. Здесь все в порядке, потому что именно так отправляются формы.

После отправки формы ее поля в запросе будут связаны со свойствами объекта Spitter, который затем будет передан методу addSpitterFromForm(). Далее объект передается методу saveSpitter() компонента SpitterService для сохранения в базе данных.

В листинге 8.10 можно также заметить, что параметр Spitter от- мечен аннотацией @Valid. Она указывает, что объект Spitter должен подвергаться проверке перед передачей методу. Подробнее об этой проверке рассказывается в следующем разделе.

Подобно методам-обработчикам, созданным ранее, этот метод так- же возвращает строку, определяющую, куда дальше должен направ- ляться запрос. На этот раз вместо логического имени представления возвращается специальное представление переадресации. Префикс redirect: свидетельствует о том, что запрос должен быть переадресо- ван в путь, указанный вслед за префиксом. Выполняя переадресацию на другую страницу, можно избежать двойной отправки формы, если пользователь щелкнет на кнопке Refresh (Обновить) в браузере.

Что касается пути переадресации – он примет вид /spitters/

{username}, где {username} представляет только что полученное имя пользователя приложения Spitter. Например, если пользователь ре- гистрируется под именем habuma, тогда после отправки формы он будет переадресован по адресу /spitters/habuma.

Обработка запросов, в которых путь определяется переменной

Теперь необходимо разобраться, как реализовать обработку запро- сов к пути /spitters/{username}. Для этого нужно добавить в Spitter- Controller еще один метод-обработчик:

@RequestMapping(value="/{username}",      method=RequestMethod.GET) public   String   showSpitterProfile(@PathVariable   String   username,

Model model) { model.addAttribute(spitterService.getSpitter(username)); return     "spitters/view";

}

Метод showSpitterProfile() не слишком отличается от других мето- дов-обработчиков, созданных до сих пор. Он принимает строковый параметр с именем пользователя и с его помощью извлекает объект Spitter из базы данных. Затем он помещает найденный объект Spitter в модель и возвращает логическое имя представления, которое ото- бразит страницу с настройками.

Однако метод showSpitterProfile() имеет ряд отличительных осо- бенностей. Во-первых, атрибут value в аннотации @RequestMapping со- держит странные фигурные скобки. А во-вторых, параметр username отмечен аннотацией @PathVariable.

Вместе эти две особенности позволяют методу showSpitterProfile() обрабатывать запросы к адресам URL с параметрами в их путях. Фрагмент пути {username} фактически является меткой-заполните- лем, соответствующей параметру username метода, отмеченному ан- нотацией @PathVariable. Независимо от того, что находится в соответ- ствующем фрагменте пути, эта часть строки будет передана методу в виде параметра username.

Например, если запрос выполнен по URL с путем /username/habuma, тогда в параметре username методу showSpitterProfile() будет пере- дано имя пользователя «habuma».

Подробнее об аннотации @PathVariable и о том, как она помогает создавать методы-обработчики для URL в стиле RESTful, расска- зывается в главе 11.

Но реализация обработки формы в методе addSpitterFromForm() еще не закончена. Вероятно, вы помните, что параметр Spitter метода addSpitterFromForm() отмечен аннотацией @Valid. Поэтому посмотрим, как используется эта аннотация для сохранения данных, получен- ных в составе формы, отправленной пользователем.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии