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 :).
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.
LikeLike
Oi Bruno, acho que vale a pena sim. As tags vão gerar html para você, então no navegador vc vai lidar com a mesma situação com que já está acostumado :).
LikeLike
[…] pode criar implementações dessa interface para adicionar campos no formulário que usam a tag form do Spring MVC. Eu por exemplo já fiz uso, quando precisei adicionar o hidden com o estado do […]
LikeLike