Preciso obrigatoriamente passar pela validação criada por mim. E não posso usar required porque ele lança o erro antes de chegar no meu validador.
Eu preciso fazer isso, porque eu tenho cadastrado no banco quais campos são requeridos e quais não são, mas não consigo validar, porque pelo fato do campo não ser requerido, quando não estiver preenchido, não passa pelo validator que eu criei.
Vc criou seu próprio validator para o JSF ou quer fazer a validação em um método comum de negócio?
Se for a segunda opção basta vc fazer a chamada do método de validação a partir do método que é disparado por uma ação na sua página JSF.
Já que os campos obrigatórios ou não só são conhecidos em tempo de execução, você pode fazer o seguinte: retire a flag “required” dos campos, e no seu validador verifique se o valor está presente. Se estiver em branco e for obrigatório, lance um ValidationException que “simula” e mensagem de erro de campo obrigatório. (“O valor deve ser informado”, ou algo do gênero).
Outro jeito (esse eu nunca testei, vc pode tentar) é colocar no atributo “required” uma expressão que te de essa informação em tempo de execução. Exemplo:
<inputText id="nome" .... required="#{validationBean.nomeRequired}" >
<inputText id="idade" .... required="#{validationBean.idadeRequired}" >
Na classe validationBean (um faces-managed-bean) você cria os métodos isNomeRequired e isIdadeRequired.