quinta-feira, 14 de junho de 2012

JSR 303 + Hibernate Validator + Spring Parte 2

JSR 303 Bean validator e Hibernate validator Parte 1

Como visto no post anterior utilizar bean validador não é nenhum grande mistério, agora chega de console e vou mostrar como utilizar em algo mais concreto, como um formulario HTML e Spring.

Recomendo que já conheça o basico do Spring, pois não vou entrar nos detalhes do framework, apenas na parte de validação

Dependencias
Spring
Hibernate validator 


Vamos começar criando a entidade como no post anterior

package br.com.cristiano;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;

public class Cliente {

 private String nome;
 private String email;
 
 @Size(min=5, message="Nome deve ter mais que 5 caracteres")
 @NotNull(message="Nome não pode ser nulo")
 public String getNome() {
  return nome;
 }
 public void setNome(String nome) {
  this.nome = nome;
 }
 
 @Email(message="Email invalido")
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 
}


Até ai nada como, isso já foi mostrado e explicado no post anterior, agora vamos para a parte do Spring criando o Controller
package br.com.cristiano;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ClienteController {

 @RequestMapping("formulario")
 public String form(){
  return "formulario";
 }
 
 @RequestMapping("adicionaCliente")
 public String adicionar(@Valid Cliente cliente, BindingResult result){
  if(result.hasErrors()){
   return "formulario";
  }
  return "adicionada";
 }
}

Note que o metodo recebe um anotação @Valid que vai validar a classe anotada e o parametro do tipo BidingResults tem uma grande quantidade de metodos que se referem ao registro de erros no form como, se tem erro ou não na resposta, quem deu erro, quantidade de erros, etc

Agora vou demonstrar como mostrar o(s) erro(s) no form.
O próprio Spring tem uma taglib para isso

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
crie uma pagina jsp com o nome formulario.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Adicionar cliente</title>
</head>
<body>
   <form action="adicionaCliente" method="post">
      Nome:
        
      <form:errors cssstyle="color:red;" path="cliente.nome">
      <br />
      Email:
      
      <form:errors cssstyle="color:red;" path="cliente.email">
      <br />
      
   </form>
</body>
</html>
Estrutura do projeto

Github: https://github.com/cristianoperez/SpringValidator