Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no Ex. 2 da Aula 5 - Validação de dados

Pessoal boa noite, novamente eu aqui.

Estou com um problema na minha aplicação e tem uma grande chance de eu ter feito besteira.

O que acontece é o seguinte, eu normalmente não pego o projeto disponibilizado nas primeiras aulas, eu geralmente crio o meu do zero, utilizando Maven.

Ai o problema é, o meu Bean Validation não está sendo ativado quando há um problema de validação no meu formulário.

Vejam, essa é minha classe que representa a entidade no banco, está anotada com as validações que preciso:

@Entity
public class Conta implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull(message = "{conta.formulario.descricao.obrigatorio}")
    @Size(min = 3, message = "{conta.formulario.descricao.tamanho}")
    private String descricao;

    @NotNull(message = "{conta.formulario.valor.obrigatorio}")
    private Double valor;

    private boolean paga;

    @Column(name = "data_pagamento")
    @Temporal(TemporalType.DATE)
    private Calendar dataPagamento;

    @Column(name = "tipo_conta")
    @Enumerated(EnumType.STRING)
    private TipoDaConta tipo;

}

Aqui está meu ContaController.java da mesma forma que demonstra no vídeo:

@RequestMapping("adicionarConta")
public String adicionarConta(@Valid Conta conta, BindingResult result) {

    if (result.hasErrors()) {
        return "conta/formContas";
    }

    DAO<Conta> contaDAO = new DAO<Conta>(Conta.class);
    contaDAO.gravar(conta);

    return "conta/contaAdicionada";

}

E sempre que eu submeto o formulário, ele passa pela linha if (result.hasErrors()) sem entrar no "if" :/.

Alguém consegue me dar uma luz?

Valeu!

6 respostas

Oi Rafael,

Você tem certeza que ele não passa pelo if e vai direto para o gravar?

Tenta colocar o gravar dentro de um else pra ver.

Douglas, boa noite,

Tenho certeza sim, fiz vários testes debugando a aplicação e por todos estes ele simplesmente passa pelo "if" sem acusar nenhum erro de validação.

O que eu estou desconfiando é que o meu Bean Validation possui somente a especificação, não contém a validação.

Pelo que vi, no projeto é utilizado o Hibernate Validation, e no meu projeto eu não coloquei essa dependência no pom.xml:

Será que meu pom.xml está certo? Segue as dependências:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
</dependencies>
solução!

Oi Rafael, é sim possivel que falte o Hibernate Validator, afinal você esta fazendo a validação direto por anotação, caso precisar além do Hibernate Validator, coloque também o Hibernate Validator Annotation Processor.

Maravilha Douglas, vou testar isso aqui e se funcionar já marco como resolvido!

Oi Rafael, tudo bem?

Conseguiu resolver seu problema?

Abraços!

@Douglas, consegui resolver o problema simplesmente colocando o Hibernate Validator, sem o Hibernate Validator Annotation Process.

@Leonardo, sim, está funcionando agora!