Spring 3 MVC – Parte 3 – Lidando com formulários no Spring 3.0 MVC

Essa é a terceira parte da série de artigos sobre o Spring 3.0 MVC. No artigo anterior criamos uma aplicação Hello World simples usando o Spring MVC. Aprendemos como configurar o Spring MVC no web.xml e como usar diferentes anotações como @Controller, @RequestMapping etc. Nesse artigo, veremos como manipular formulários no Spring 3.0 MVC.

Nosso objetivo

Nosso objetivo é criar uma aplicação básica de Gerenciamento de Contatos. Essa aplicação terá um formulário para obter os detalhes do contato. Nesse momento, iremos apenas imprimir os detalhes em arquivos de log. Aprenderemos com capturar os dados do formulário usando o Spring 3 MVC.
spring-3-contact-manager-form

Começando

Vamos adicionar o formulário de contato a nossa aplicação Hello World baseada no Spring 3 MVC Hello World application. Abra o arquivo index.jsp e altere-o para o seguinte:
Arquivo: WebContent/index.jsp

<jsp:forward page="contacts.html"></jsp:forward>

O código acima apenas redireciona o usuário para a página contacts.html.

Criando o arquivo contact.jsp

Crie um arquivo JSP que exibirá o formulário Contact aos usuários.
Arquivo: /WebContent/WEB-INF/jsp/contact.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
    <title>Spring 3 MVC Series - Contact Manager</title>
</head>
<body>
<h2>Contact Manager</h2>
<form:form method="post" action="addContact.html">
    <table>
    <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="lastname">Email</form:label></td>
        <td><form:input path="email" /></td>
    </tr>
    <tr>
        <td><form:label path="lastname">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>

Aqui, no JSP acima, apenas exibimos um formulário. Observe que o formulário é submetido para  a página addContact.html.

Adicionando o Formulário e o Controller no Spring 3

Iremos adicionar a lógica no Spring 3 para exibir o formulário e capturar os valores inseridos nele. Para isso criaremos dois arquivos Java. O primeiro é Contact.java que não é nada mais do que a forma de exibir/recuperar dados da tela e o segundo é o ContactController.java que é a classe controller do Spring.
contact-form-package-spring-mvc
Arquivo: net.viralpatel.spring3.form.Contact

package net.viralpatel.spring3.form;
public class Contact {
    private String firstname;
    private String lastname;
    private String email;
    private String telephone;
    
    //.. getter and setter for all above fields.
    
}

O arquivo acima é a forma pela qual os dados são “capturados” da tela. Observe que não foram mostrados os métodos getter e setter. Você pode gerar esses método pressionando a combinação de teclas Alt + Shift + S, R.
Arquivo: net.viralpatel.spring3.controller.ContactController

package net.viralpatel.spring3.controller;
import net.viralpatel.spring3.form.Contact;
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.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
@Controller
@SessionAttributes
public class ContactController {
    @RequestMapping(value = "/addContact", method = RequestMethod.POST)
    public String addContact(@ModelAttribute("contact")
                            Contact contact, BindingResult result) {
        
        System.out.println("First Name:" + contact.getFirstname() +
                    "Last Name:" + contact.getLastname());
        
        return "redirect:contacts.html";
    }
    
    @RequestMapping("/contacts")
    public ModelAndView showContacts() {
        
        return new ModelAndView("contact", "command", new Contact());
    }
}

Na classe do controller observe que criamos dois métodos com  Request Mapping /contacts e /addContact. O método showContacts() será chamado quando o usuário solicita a URL contacts.html. Esse método renderiza um modelo com nome “contact”. Observe que no objeto ModelAndView passamos um objeto Contact em branco com o nome “command”. O framework Spring espera um objeto com esse nome se estiver usando  <form:form> em seu arquivo JSP.
Note também que no método addContact() temos a anotação RequestMapping e passamos um atributo method=”RequestMethod.POST”. Dessa forma o método será chamado apenas quando o usuário gera uma requisição POST para a URL /addContact.html. Também associamos a anotação  @ModelAttributepara o argumento Contact. Isso ligará os dados da requisição ao objeto Contact. Nesse método nós apenas exibimos os valores de Firstname e Lastname e redirecionamos o view para o arquivo contacts.html.

Isso é tudo pessoal

O formulário está completo agora. Apenas rode a aplicação no Eclipse pelo pressionamento da combinação de teclas Alt + Shift + X, R. Será mostrado o formulário de contatos. Apenas informe os valores e pressione o botão Add. Após pressionar esse botão, será imprsso os valores de firstname e lastname no sysout logs.
spring-3-contact-manager-form

Baixar o código fonte

Clique aqui para baixar o código fonte desse artigo

Traduzido de viralpatel.net