Prefira as tags de formulário do Spring MVC!

Uma das coisas que atrasa o desenvolvimento de um projeto é quando o programador resolve investir tempo para construir uma parte do software que já foi pensada por uma biblioteca ou framework. Quando pensamos no Spring MVC, um caso que me vem a mente são formulários que não são construídos usando as tags providas pelo framework.

    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

      <div class="form-group">
          <input type="text" name="nome" value="${profissional.nome}"/>
      </div>
      <div class="form-group">
        <input type="text" name="cpf" value="${profissional.cpf}"/>          
      </div>
      <div class="form-group">
        <input type="text" name="dataNascimento" 
          value="<fmt:formatData value="${profissional.dataNascimento.time}" pattern="dd/MM/yyyy"/>
      </div>
      <div class="form-group">       
       <select name="estado">
        <c:forEach items="${estados}" var="estadoAtual">
<option value="${estadoAtual.value}" ${profissional.estado == estadoAtual ? 'selected' : ''}>${estadoAtual.nome}
          </option>
        </c:forEach>
       </select>
      </div>

Desenvolvendo dessa forma, vai fazer com que o programador perca tempo implementando toda aquela lógica de manter o estado dos campos nos erros de validação, ou quando o usuário tiver que entrar numa tela de edição. Só que fica pior, viu o código para manter o estado do  select? E para exibir data formatada?

Para todos os casos citados, você poderia usar as tags de formulário do Spring MVC. O mesmo form que foi mostrado acima, poderia ser escrito da seguinte forma:

    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <div class="form-group">                    
        <form:input path='nome' type='text'/>
        <form:errors path='nome'/>          
    </div>
   <div class="form-group">                    
        <form:input path='cpf' type='text'/>
        <form:errors path='cpf'/>          
    </div>
    <div class="form-group">                    
        <form:input path='dataNascimento' type='text'/>
        <form:errors path='dataNascimento'/>          
    </div>
    <div class="form-group">
      <form:select path='estado' itemLabel="nome" itemValue="value" items="${estadoList}"/>
      <form:errors path='estado'/>
    </div>

Você simplesmente usa as tags disponíveis referenciando as propriedades do seu objeto e deixa o Spring MVC fazer o trabalho dele. Por exemplo, ele já vai verificar o estado relacionado com seu objeto e deixar a opção escolhida para você. Só que ainda vai além, no campo de data ele vai usar a annotation de formatação que você usou no seu atributo e já vai exibir a data da maneira correta.

  public class Profissional {
      
     ...
     @DateTimeFormat(iso=ISO.DATE)
     private Calendar dataNascimento;
     @NotNull
     private Estado estado;

     ...
  }  

Isso tudo somado, poupa um bom tempo de desenvolvimento que pode ser investido para melhorar outras partes importantes do seu código.

Lembre de sempre tirar proveito do que o seu framework já possui, não gastando tempo escrevendo algo que já foi pensado e implementado por outras pessoas cujo foco era exatamente facilitar a sua vida! Como é o último dia do mês, faço aqui o meu jabá dizendo que isso e muitas outras coisas podem ser encontradas no meu livro na Casa do Código :).

3 thoughts on “Prefira as tags de formulário do Spring MVC!

  1. Ola Alberto, primeiramente gostaria de agradecer o conteudo de qualidade que vc disponibiliza de forma totalmente gratis.

    Uma duvida que tenho quanto a usar as taglibs do spring MVC eh o quao produtivo continua sendo uma vez que passamos a usar requisicoes AJAX para estes formularios e fazemos bastante manipulacao dos objetos DOM com java script?

    Pela sua experiencia, neste cenario as taglibs continuam sendo produtivas ou atrapalham mais do que ajudam?

    PS. desculpe a acentuacao, meu teclado nao eh brasileiro…

    Abs e Obrigado mais uma vez.

    Like

Leave a comment