Exibir mensagem de erro personalizada com JSF (Faces Message)

Pessoal,

Estou tentando exibir uma mensagem de erro na tela quando o usuário tenta cadastrar um fornecedor com o CNPJ igual a um que já esteja cadastrado. A lógica está certa, verifico no BD direitinho, o problema é que a mensagem de erro, para informar ao usuário onde ele está errando não aparece, não acontece nada na tela, ele não envia nada, não faz nada, nem mostra a mensagem de erro.
Se alguém puder me ajudar.

XHTML:

 <h:messages id="mensagensErro" styleClass="erros"/>

<p:commandButton image="ui-icon-disk" value="Salvar"                                     
                                 actionListener="#{fornecedorController.salvar}"
                                 update=":formManterFornecedor"/> 

BEAN:

 public void salvar() throws IOException {

        if (this.verificarCNPJ(this.fornecedor.getCnpj())) {
            this.fornecedorDao.saveOrUpdate(this.fornecedor);
          
            this.fornecedor = new Fornecedor();

            String url = "fornecedor.sgm";

            FacesContext fc = FacesContext.getCurrentInstance();
            ExternalContext ec = fc.getExternalContext();

            ec.redirect(url);
        }
        else {
            FacesContext ctx = FacesContext.getCurrentInstance();
            ctx.addMessage("mensagensErro", new FacesMessage("CNPJ já cadastrado!"));
        }
    }

Onde estou errando? Já tentei fazer essa exibição personalizada em campos de texto, labels, utilizando o message.properties, mas até agora nada.

Estou tentando fazer assim agora:

 FacesContext facesContext = FacesContext.getCurrentInstance();
 facesContext.addMessage("cnpj", 
			new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                "CNPJ já cadastrado!", 
                                "CNPJ já cadastrado!"));   

E nada acontece, continua sem mostra a mensagem que quero.
Só pra contar, não sei se faz diferença, estou querendo exibir essa mensagem dentro de um dialog.

O mensagensErro está dentro do formManterFornecedor?

Sim, está.

Amigo já tentou usar o Growl???

tenta usar assim:

XHTML

<p:growl id="messages" showDetail="true" closable="true" />

BEAN

FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage("Mensagem!"));

E ai amigo, conseguiu resolver isso ??