Jsf + richfaces - <h:messages>

Galera… Boa tarde!

Tenho um modal panel que é aberto para alterar dados de um cliente. quando clico no botão salvar que está dentro deste modal, volta pra tela que tem a lista de clientes já com o registro atualizado. O problema é que deveria aparecer uma mensagem de alterado com Sucesso, mas a mesma não é exibida… Agradeço qualquer ajuda!! O código tá ai pessoal…

Método que realiza a alteração e manda mensagem de sucesso


public String atualizarClientes() throws SQLException, BatchUpdateException{
		
		try{
		BOCliente bo = new BOCliente();
		bo.atualizar(clientes);		
		FacesContext.getCurrentInstance().addMessage("messages", 
					new FacesMessage ("Registro alterado com sucesso!"));
		}catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage("erro", 
					new FacesMessage ("Falha ao alterar registro!"));
		}
		
		return null;
	}

a4j:command button alterar que tá dentro do meu modal


<a4j:commandButton value="Salvar" id="idAlterar" action="#{actionClientes.atualizarClientes}">
			<rich:componentControl for="panelCliente" attachTo="idAlterar" operation="hide" event="onclick"/>
		</a4j:commandButton>

h:messages que tá junto com a lista de clientes e recebe a mensagem que vem do meu método


<h:messages showDetail="false" showSummary="true" layout="table"
	infoStyle="color:blue; font-family:verdana; font-size:11px;" id="msgAlterar"/>

Ah, já tentou deixar o primeiro argumento de addMessage como null?
Acho que como não existem componentes com valor de id igual a messages ou erro o Faces nem sabe para onde começar a enviar a mensagem.

galera estou com esse mesmo problema, bem parecido alguem teria alguma ideia do q pode ser

[code]public String saveUser() {
try{
this.userDAO.saveUser(user);
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(“Usuário cadastrado com sucesso”));
clean();

	} catch (Exception e) {
		e.printStackTrace();	
		
	}
	return "saveUser";
}[/code]

Olá!

O problema é que você está usando um botão Ajax (a4j:commandButton) e um componente de mensagens padrão (h:messages), que só é re-renderizado quando ocorre carregamento na página.

Os dois precisam “combinar”, ou seja:

Use a4j:commandButton e rich:messages caso sua intenção seja fazer uma chamada Ajax
ou
Use h:commandButton e h:messages caso esteja tentando fazer uma página que recarrega após a requisição

mas estao combinando segue um trecho do codigo

<h:column> <h:commandButton styleClass="button" value="Salvar" action="#{userHandler.saveUser}" id="cadastrar" > </h:commandButton> <div align="center"><h:messages showDetail="false" showSummary="true" layout="table" /></div> </h:column>

[quote=dedetrix]mas estao combinando segue um trecho do codigo

<h:column> <h:commandButton styleClass="button" value="Salvar" action="#{userHandler.saveUser}" id="cadastrar" > </h:commandButton> <div align="center"><h:messages showDetail="false" showSummary="true" layout="table" /></div> </h:column>[/quote]
Realmente esse não é o erro no seu caso, eu estava me referindo à questão original do kelvis.

Falando do seu código, ele tem um erro que pode fazer com que a mensagem esteja “sumindo”.
É a chamada “exceção engolida”. Repare que se algo ocorrer, é dado um printStackTrace() e a execução continua normalmente, ou seja, ninguém nunca vai saber que algo errado aconteceu.
Coloque uma mensagem de erro para o usuário nesse ponto também!

a parte de mesangem de erro funciona normalmente mas oq eu mais queria msm e q aparecesse uma mensagem de sucesso de erro funciona na boa, se vc tiver um outra ideia para uma soluçao deste tipo me ajudaria