Статьи

Обработка форм с помощью Spring 3 MVC

Эта статья является частью серии статей, написанных о Spring 3. Предыдущая статья этой серии доступна здесь .

В этой статье мы сделаем еще один шаг навстречу Spring MVC. [ В сторону : PDF от автора термина MVC .] Основываясь на предыдущей статье, давайте добавим код, необходимый для добавления «Контакты» в приложение. Во-первых, нам нужно добавить некоторый компонент пользовательского интерфейса, чтобы начать процесс. Для простоты, пусть это будет простая ссылка.

Файл: /springwebapp001/src/main/webapp/index.jsp

1
2
3
4
[...] 
<a href="contacts/addNew.html"> Add new contact.</a
     
[...] 

Как вы могли заметить, мы указали эту ссылку на «contacts / addNew.html». Это означает, что нам нужно что-то — контроллер и / или метод, который ищет этот запрос. Давайте создадим контроллер, который будет выставлять все запросы, начиная с «контактов».

Файл: src / main / java / org / academy / ui / spring3 / controllers / ContactCtlr.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
package org.academy.ui.spring3.controllers;                    
                                                                 
import org.academy.ui.spring3.forms.ContactFrm;                
import org.slf4j.Logger;                                       
import org.slf4j.LoggerFactory;                                
import org.springframework.stereotype.Controller;              
import org.springframework.validation.BindingResult;           
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod;  
import org.springframework.web.servlet.ModelAndView;           
                                                                 
@Controller                                                    
@RequestMapping(value = "/contacts")                           
public class ContactCtlr {                                     
 private final static Logger logger = LoggerFactory         
   .getLogger(ContactCtlr.class);                     
[...] 

Spring также должен знать, что он должен искать определенный пакет для контроллеров.

Файл: /springwebapp001/src/main/webapp/WEB-INF/spring-servlet.xml

1
2
3
[...] 
<context:component-scan base-package="org.academy.ui.spring3.controllers" />    
[...] 

Установив это, нам понадобится метод в ContactCtlr для поля запросов GET для /addNew.html. [В сторону: В чем разница между запросами GET и POST? Читайте здесь. ]

Файл: src / main / java / org / academy / ui / spring3 / controllers / ContactCtlr.java

1
2
3
4
5
6
7
8
9
[...] 
private final String addNewView = "Contacts/AddNew";           
                                                                 
@RequestMapping(value = "/addNew", method = RequestMethod.GET) 
public String addNewContact() {                                
 logger.debug("Display form to add a new contact.");        
 return addNewView;                                         
}                                                              
[...] 

Здесь мы просто направили элемент управления в «Контакты / AddNew», который сводится к /springwebapp001/src/main/webapp/WEB-INF/views/Contacts/AddNew.jsp.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<html
<head
<title>Add New Contact</title
</head
<body
<form:form method="post" commandName="contact" action="addNew.html"
<table
<tr
<td colspan="2">Add a new contact.</td
</tr
<tr
<td><form:label path="firstname">First Name</form:label></td
<td><form:input path="firstname" /></td
</tr
<tr
<td><form:label path="lastname">Last Name</form:label></td
<td><form:input path="lastname" /></td
</tr
<tr
<td><form:label path="email">Email</form:label></td
<td><form:input path="email" /></td
</tr
<tr
<td><form:label path="telephone">Telephone</form:label></td
<td><form:input path="telephone" /></td
</tr
<tr
<td colspan="2"><input type="submit" value="Add Contact" /></td
</tr
</table
</form:form
</body
</html

Эта форма должна быть поддержана Java Pojo, который будет содержать все элементы формы, упомянутые в JSP.

Файл: /springwebapp001/src/main/java/org/academy/ui/spring3/forms/ContactFrm.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package org.academy.ui.spring3.forms; 
   
public class ContactFrm { 
 private String firstname;  
 private String lastname;  
 private String email;  
 private String telephone; 
    
 public String getFirstname() { 
  return firstname; 
 
 public void setFirstname(String firstname) { 
  this.firstname = firstname; 
 
 public String getLastname() { 
  return lastname; 
 
 public void setLastname(String lastname) { 
  this.lastname = lastname; 
 
 public String getEmail() { 
  return email; 
 
 public void setEmail(String email) { 
  this.email = email; 
 
 public String getTelephone() { 
  return telephone; 
 
 public void setTelephone(String telephone) { 
  this.telephone = telephone; 
 
   

Из AddNew.jsp вы можете увидеть, что форма ожидает, что кто-то обработает вызов addNew.html. Как и прежде, давайте вернемся к контроллеру и добавим метод, который обрабатывает запрос POST, в «addNew.html». Обратите внимание, что это запрос POST, а не запрос GET, который мы обрабатывали ранее.

Файл: /springwebapp001/src/main/java/org/academy/ui/spring3/controllers/ContactCtlr.java

01
02
03
04
05
06
07
08
09
10
[...] 
@RequestMapping(value = "/addNew", method = RequestMethod.POST)          
public ModelAndView addNewContact(                                       
  @ModelAttribute("contact") ContactFrm contactFrm,                
  BindingResult result) {                                          
 logger.debug("Adding a new contact. {}", contactFrm.getFirstname()); 
 // Some code to work on the data received from the user.                                                                      
 return new ModelAndView(addNewView, "contact", new ContactFrm());    
[...] 

И вот, если вы скомпилируете и запустите это приложение в любом контейнере сервлетов, например Tomcat, вы получите ссылку, которая приведет к форме, которая позволит вам вводить данные, которые будут передавать эти данные на контроллер Java по адресу конец сервера, и вернитесь к форме для получения дополнительной информации. Те из зрителей, которые проектировали и разрабатывали веб-приложения до появления фреймворков MVC, наверняка будут иметь влажные глаза. Даже если вы работали с ранними фреймворками для MVC, Struts, чтобы назвать наиболее успешный, потратит много времени на объединение трех компонентов (M, V и C), что теперь мы можем сделать менее чем за 10 минут. Разработка программного обеспечения определенно прошла долгий путь.

В следующем разделе мы добавим модульное тестирование и ведение журнала в это приложение . Удачного кодирования.

Ссылки по теме

Перейдите к проверке формы с помощью Spring 3 MVC

Ссылка: Обработка форм с помощью Spring 3 MVC от нашего партнера по JCG Partho в блоге Tech for Enterprise .