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
[code]public List 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”);
}[/code]
alguma sugestão?
abraco
Mostra a sua xhtml por favor.
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>...
A chamada ao método da consulta e o h:messages
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? 
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)]
[quote=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)]
[/quote]
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"/>
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…
Então Max…
acabei de conseguir fazer funcionar… 
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…