1
resposta

Dúvida arquitetural sobre validadores

Bom dia pessoal,

Me surgiu uma dúvida a respeito se é apropriado criar um custom validator para validar um campo que não pode ter valor duplicado (pra isso é preciso fazer uma busca no banco de dados) ou o ideal seria deixar no Management Bean. Exemplo: Não é permitido cadastrar um livro com o mesmo nome.

DuplicateNameValidator

public class DuplicateNameValidator implements Validator {

    private LivroDAO dao;

    public void validate(FacesContext context, UIComponent component,
            Object value) throws ValidatorException {

        // busca livro pelo nome
        // verifica se existe
        // caso sim, lança exception
    }
}

ou

LivroBean

public class LivroBean {

    private LivroDAO dao;
    private Livro livro;

    public void save() {
        // busca livro pelo nome
        // verifica se existe
        // caso sim, lança exception

        // tudo ok, salva!
    }
}

A principal dúvida é se o validator pode tratar desse tipo de validação, onde é necessário fazer buscas externas, ou ele valida somente em cima de informações do formulário.

1 resposta

Fala Paulo, tudo bem?

Em questão arquitetural, fazer pelo validator é melhor porque ele será chamado antes no ciclo de vida do JSF, acredito que não tenha problema em usar os Daos desde que sejam injetados pelo CDI.

Mas eu acho que tenha uma solução melhor para essa validação. Se você estiver usando JPA (hibernate ou qlq outra implementação pode anotar o atributo na sua classe modelo com @Column(unique =true).