2
respostas

JSF + Grupos de validação do JPA

Olá, como vimos no curso o JSF tem uma integração muito boa com a BeanValidation, então se eu tenho por exemplo @NotNull private String nome e tentar salvar, vou receber uma mensagem no meu formulário informando que o referifo campo não pode ser nulo. O mesmo não deveria acontecer com os grupos de validação? estou tentando validar um cpf ou cnpj de acordo com a natureza física/ juridica, a validação até ocorre, mas não funciona como nos campos anotados com NotNullpor exemplo, é como se ele validasse após essa fase,ele vai para a página de erro 500 com a constraintviolationException, até criei um exception handler mas também não deu jeito, a maneira de tratar grupos de validação é diferente co o JSF? minha implementação abaixo:

@Entity
@Table(name="parte")
@GroupSequenceProvider(value = ParteGroupSequenceProvider.class)
public class Parte implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="parte_id")
    private Long parteId;

    @OneToOne
    @JoinColumn(name = "usuario_id")
    private Usuario usuario;

    @Enumerated(EnumType.STRING)
    private EstadoCivil estadoCivil;

    @Enumerated(EnumType.STRING)
    private TipoPessoa tipoPessoa;

    @NotEmpty
    private String nome;

    @CPF(groups=PessoaFisica.class,message="Formato de CPF Inválido")
    @CNPJ(groups=PessoaJuridica.class,message="Formato de CNPJ Inválido")
    @NotEmpty
    @Column(name="cpf_cnpj")
    private String cpfCnpj;
//continua...
    }
public class ParteGroupSequenceProvider implements DefaultGroupSequenceProvider<Parte> {


     public List<Class<?>> getValidationGroups(Parte entity) {

            List<Class<?>> groups = new ArrayList<>();
            groups.add(Parte.class);
            if (entity != null) {
              if (entity.getTipoPessoa().equals(TipoPessoa.FISICA)) {
                groups.add(PessoaFisica.class);
              } else if (entity.getTipoPessoa().equals(TipoPessoa.JUIDICA)) {
                groups.add(PessoaJuridica.class);
              }
            }
            return groups;
          }
}
public interface PessoaFisica {

}
public interface PessoaJuridica {

}
2 respostas

Oi Ricardo, tudo bem ?

Estou na dúvida se você pode num mesmo campo falar que ele é tanto cpf quanto cnpj, percebe que um não vai permitir que o outro passe, dado que são regras diferentes.

Pode sim, esse recurso é o recurso de Grupos de validação do bean validator, ele consegue fazer a validação mas parece que não está fazendo no mesmo momento das outras validações