JSF e PrimeFaces - Mensagem personalizada [RESOLVIDO]

Fala pessoal blz?

Estou desenvolvendo com JSF 2.0 e PrimeFaces 2.2.1. Quando o usuário tira o foco do campo login eu verifico se este login já existe no banco. Se já existir eu quero mandar uma mensagem para ele. Estou fazendo com f:ajax. O método está sendo chamado mas a mensagem não está aparecendo. Alguém sabe o que estou fazendo de errado?

    public void comparaLoginListener() {  
            if (medico.getLogin() != null  
                    && !medico.getLogin().equals("")  
                    && ServiceFactory.getInstance().getMedicoService()  
                            .findByLogin(medico.getLogin()) != null) {  
      
                FacesContext.getCurrentInstance().addMessage(  
                        "mensagem-medico-login",  
                        new FacesMessage(FacesMessage.SEVERITY_WARN,  
                                "Já existe um usuário com este login", null));  
                  
                medico.setLogin("");  
      
            }  
      
        }  

    <h:outputText value="Login: " for="medico-login" />         
            <p:inputText id="medico-login" required="true" value="#{medicoBean.medico.login}">  
            <f:ajax event="change" render="mensagem-medico-login medico-login" execute="medico-login"  
                    listener="#{medicoBean.comparaLoginListener}" />  
            </p:inputText>  
            <p:message id="mensagem-medico-login" for="medico-login" />  

Vlw!!!

falta atualizar o p:message

Tente assim :

<p:inputText id="medico-login" required="true" value="#{medicoBean.medico.login}" update="mensagem-medico-login">    

Outro teste

<f:ajax event="change" render="mensagem-medico-login,medico-login" execute="medico-login">   // acho que tem um virgula separando os componentes e não sei se está correto esse execute ...

Nao tenho certeza do que vou falar, mas imagino que o erro aconteça pq ele procura pelo elemento com ID ‘mensagem-medico-login’ e não encontra, pois qnd a tela foi renderizada esse erro ainda não existia.

O que eu aconselho você fazer é colocar o p:message dentro de outro elemento, sempre visível, e mandar rerenderiza-lo. Algo como:

    <h:outputText value="Login: " for="medico-login" />         
    <p:inputText id="medico-login" required="true" value="#{medicoBean.medico.login}">  
         <f:ajax event="change" render="areaRerender medico-login" execute="medico-login"  
                listener="#{medicoBean.comparaLoginListener}" />  
     </p:inputText>
     <h:outputText id="areaRerender">
          <p:message id="mensagem-medico-login" for="medico-login" />
     </h:outputText>

Nao sei se ira funcionar ocm h:outputText tbm. Procure por algo que funcione, faça uns testes.

Pessoal, ainda não funcionou.

Dei uma lida no artigo abaixo que me ajudou muito, mas ainda não está funcionando.
Alguém sabe o que estou fazendo de errado?

Página

<h:outputText value="Login: " for="medico-login" />
		<p:inputText id="medico-login" required="true"
			value="#{medicoBean.medico.login}">
			<f:ajax event="change" render="medico-login mensagem-medico-login"
				execute="medico-login" listener="#{medicoBean.comparaLoginListener}" />
		</p:inputText>
		  
		<p:message id="mensagem-medico-login" for="medico-login" />

Bean

	public void comparaLoginListener() {
		if (medico.getLogin() != null
				&& !medico.getLogin().equals("")
				&& ServiceFactory.getInstance().getMedicoService()
						.findByLogin(medico.getLogin()) != null) {
									 
			 FacesContext fc = FacesContext.getCurrentInstance();
			 fc.addMessage("mensagem-medico-login", MessageFactory.getMessage("prontuario.faces.LoginExistente"));

			medico.setLogin("");
		}

	}

Properties

prontuario.faces.LoginExistente = Já existe um usuário com este login.

faces-config.xml


	<application>
		<message-bundle>resources.Messages</message-bundle>
	</application>

Alguém???

Ninguém nunca teve esse problema???

Mudei a estratégia para utilizar validator. a mensagem só aparece quando eu envio o formulário e não quando eu saio do campo. Foi a forma que achei.
Segue o link: http://www.guj.com.br/java/71718-jsf---validator-resolvido

Porém não criei uma mensagem no código, utilizei a mensagem do meu arquivo de mensagens como o código abaixo.

context.addMessage(toValidate.getClientId(context), MessageFactory.getMessage("prontuario.faces.LoginExistente"));