JSF 2 não mostra mensagem h:messages [RESOLVIDO]

9 respostas
A
Fala galera, estou trabalhando com jsf 2 junto com prime faces. O que acontece é o seguinte, tenho uma página que tem um p:dataTable, e no método da consulta, está lancando um exceção, mas a mensagem não é mostrada na tela, ja coloquei p:messages h:messages , p:growl e não mostra nada.. como a consulta é efetuada soh qdo é reenderizado o datatable, preciso de alguma forma mandar atualizar o messages.. como chamo a tela:
<p:menuitem  value="Transportador" url="/pages/admin/transportador/cadastrar.jsf" />
datatable
<p:dataTable  id="pdtTransportadores" var="trans" value="#{transportadorBean.transportadores}"  style="width:600px" emptyMessage="Não existe transportador cadastrado.">
MBean
public List<Transportador> getTransportadores()
	{
		if(transportadores == null)
			consultarTransportadores();
		
		return transportadores;
	}
private void consultarTransportadores()
	{
		try
		{
			this.transportadores = transportadorDao.findAll();
		}
		catch (Exception e)
		{
			super.logError(e, "Erro ao consultar transportadores");
			FacesUtils.mensErro("Erro ao consultar transportadores");
		}

alguma sugestão?
abraco

9 Respostas

L

Mostra a sua xhtml por favor.

A

fica muito grande postar o xhtml inteiro aqui…
o que precisa saber?

<h:form id="formCadastrados"> <p:growl id="growl2" /> <div class="mensagem"> <p:messages /> teste </div> <p:dataTable id="pdtTransportadores" var="trans" value="#{transportadorBean.transportadores}" style="width:600px" emptyMessage="Não existe transportador cadastrado."> <p:column style="width:40px"> <f:facet name="header"> <h:outputText value="#{requestScope.msg.label_id}" /> </f:facet> <h:outputText value="#{trans.id}" /> </p:column>...

L

A chamada ao método da consulta e o h:messages

M

No Bean:

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,null,"Escreva_aqui_a_mensagem_de_erro")); //Você pode mudar o tipo de SERVERITY

Na View:

<p:messages id="messages" showDetail="true" autoUpdate="true"/> //Se necessário habilite ou não showSummary.

Caso o seu botão de chamada ao método que verifica a exceção seja Ajax, verifique a renderização do campo de mensagem.

Deu certo? :wink:

A

esta no primeiro post

A

Max eu ja tinha tentado o autoupdate, mas de qq forma não deu certo ainda…

INFO: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos. sourceId=null[severity=(ERROR 2), summary=(Erro ao consultar transportadores), detail=(Erro ao consultar transportadores)]

M

alves.Felipe:
Max eu ja tinha tentado o autoupdate, mas de qq forma não deu certo ainda…

INFO: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos. sourceId=null[severity=(ERROR 2), summary=(Erro ao consultar transportadores), detail=(Erro ao consultar transportadores)]

Estranho…
Você está usando dessa forma?

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,null,"Escreva_aqui_a_mensagem_de_erro"));

Tenta ao invés de utilizar FacesMessage armazenar o erro em uma variavel String e no lugar de <p:messages/> você coloca um

<h:outputText value="#{seuBean.stringErro}" style="color: red"/>
A

cara… tipo depois que abre a tela… e eu clico no botão cadastrar… ai sim mostra a msg dos campos obrigatórios…
mas nesse caso de abrir a tela e ja mostrar o erro nao mostra… vou tentar fazer o que vc falou…

A

Então Max…
acabei de conseguir fazer funcionar… :smiley:
se eu colocar o messages pra baixo do datatable funciona…
como os messages estavam em cima, eles eram reenderizados antes da datatable… e como o proprio datatable chama o método
o erro vem depois de reenderizar o datatable…
usando o <p:growl autoUpdate=“true”/> fica tranquilo…
mas se fosse usar o p:messages, a msg mostra soh la em baixo…rs
mas é isso ai…
valeo pela ajuda…

Criado 14 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 9
Participantes 3