Рубрики
Без рубрики

Начало работы с формами в Spring MVC

Узнайте, как работать с формами с помощью Spring MVC – отображение базовой сущности, отправка, отображение ошибок.

Автор оригинала: Eugen Paraschiv.

1. Обзор

В этой статье мы обсудим весенние формы и привязку данных к контроллеру. Кроме того, мы рассмотрим одну из основных аннотаций в Весенний MVC т.е. @ModelAttribute .

Конечно, Spring MVC-это сложная тема с множеством вещей, которые вам нужно понять, чтобы использовать ее в полной мере, поэтому определенно углубитесь в рамки здесь .

Дальнейшее чтение:

Изучение библиотеки тегов форм Spring mvc

Введение в использование FreeMarker в Spring MVC

Введение в использование Thymeleaf весной

2. Модель

Во – первых- давайте определимся простая сущность что мы собираемся отобразить и привязать к форме:

public class Employee {
    private String name;
    private long id;
    private String contactNumber;

    // standard getters and setters
}

Это будет наш объект поддержки формы.

3. Вид

Далее – давайте определимся фактическая форма , и, конечно же, HTML-файл, который его содержит. Мы будем использовать страницу, на которой создается/регистрируется новый сотрудник:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

    
    
    
        

Welcome, Enter The Employee Details

Name
Id
Contact Number

Во – первых, обратите внимание, что мы включаем библиотеку тегов в нашу страницу JSP – форма taglib – чтобы помочь с определением нашей формы.

Далее – <форма:форма> тег играет здесь важную роль; он очень похож на обычный HTML <форма> тег, но Атрибут ModelAttribute атрибут-это ключ, который указывает имя объекта модели, поддерживающего эту форму:

Это будет соответствовать @ModelAttribute позже в контроллере.

Далее – каждое поле ввода использует еще один полезный тег из taglib формы Spring – форма: префикс . Каждое из этих полей указывает a путь атрибут – это должно соответствовать получателю/установщику атрибута модели (в данном случае классу Employee). Когда страница загружается, поля ввода заполняются Spring, которая вызывает геттер каждого поля, связанного с полем ввода. При отправке формы вызываются сеттеры для сохранения значений формы в объекте.

Наконец – когда форма представлена , вызывается обработчик POST в контроллере, и форма автоматически привязывается к работник аргумент, который мы передали.

Основные формы с пружинным MVC

4. Контроллер

Теперь давайте посмотрим на контроллер это будет решать заднюю часть:

@Controller
public class EmployeeController {

    @RequestMapping(value = "/employee", method = RequestMethod.GET)
    public ModelAndView showForm() {
        return new ModelAndView("employeeHome", "employee", new Employee());
    }

    @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("employee")Employee employee, 
      BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "error";
        }
        model.addAttribute("name", employee.getName());
        model.addAttribute("contactNumber", employee.getContactNumber());
        model.addAttribute("id", employee.getId());
        return "employeeView";
    }
}

Контроллер определяет две простые операции – GET для отображения данных в форме и POST для операции создания с помощью отправки формы.

Также обратите внимание, что если объект с именем “сотрудник” не будет добавлен в модель, Spring будет жаловаться, когда мы попытаемся получить доступ к JSP, потому что JSP будет настроен для привязки формы к атрибуту модели “сотрудник”.:

java.lang.IllegalStateException: 
  Neither BindingResult nor plain target object 
    for bean name 'employee' available as request attribute
  at o.s.w.s.s.BindStatus.(BindStatus.java:141)

Чтобы получить доступ к объекту поддержки формы, нам нужно ввести его через аннотацию @ModelAttribute .

Один @ModelAttribute на аргументе метода указывает, что аргумент будет извлечен из модели. Если аргумент отсутствует в модели, он сначала будет создан, а затем добавлен в модель.

5. Обработка Ошибок Привязки

По умолчанию Spring MVC создает исключение при возникновении ошибок во время привязки запроса. Обычно это не то, что мы хотим, вместо этого мы должны представлять эти ошибки пользователю. Мы собираемся использовать BindingResult добавив один в качестве аргумента к нашему методу контроллера:

public String submit(
  @Valid @ModelAttribute("employee") Employee employee,
  BindingResult result,
  ModelMap model)

То BindingResult аргумент должен располагаться сразу после нашего объекта поддержки формы – это один из редких случаев, когда порядок аргументов метода имеет значение. В противном случае мы столкнемся со следующим исключением:

java.lang.IllegalStateException: 
  Errors/BindingResult argument declared without preceding model attribute. 
    Check your handler method signature!

Теперь – исключение больше не генерируется; вместо этого ошибки будут зарегистрированы в BindingResult , который передается методу submit . На данный момент мы можем обрабатывать эти ошибки различными способами – например, операция может быть отменена:

@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@Valid @ModelAttribute("employee")Employee employee, 
  BindingResult result,  ModelMap model) {
    if (result.hasErrors()) {
        return "error";
    }
    
    //Do Something
    return "employeeView";
}

Обратите внимание, что в случае, если результат содержит ошибки, мы возвращаем пользователю другое представление, чтобы правильно отобразить эти ошибки. Давайте взглянем на это представление – error.jsp :


    
    

    
        

Please enter the correct details

Retry

6. Отображение сотрудника

Наконец, помимо создания нового сотрудника, мы также можем просто отобразить его – вот код быстрого просмотра для этого:


    

Submitted Employee Information

Name : ${name}
ID : ${id}
Contact Number : ${contactNumber}

Страница JSP просто использует выражения EL для отображения значений свойств объекта Employee в модели.

7. Тестирование приложения

Простое приложение может быть развернуто – например, на сервере Tomcat – и доступно локально:

http://localhost:8080/spring-mvc-xml/employee

Это представление, содержащее основную форму – перед операцией отправки:

Пример формы Spring MVC - Отправить

Пример формы Spring MVC – Отправить

После отправки отображаются данные:

После отправки отображаются данные:

Пример формы Spring MVC – Просмотр

И это все – рабочий пример простой формы с Spring MVC, с проверкой .

Реализацию этого весеннего учебника по MVC можно найти в проекте GitHub – это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.

Наконец, как я уже говорил в начале статьи, вам определенно следует углубиться в Spring MVC .