|WARNING: FacesMessage(s) have been enqueued, but may not have been displayed

Pessoal, ja faz 3 dias que estou com este problema e ainda não consegui descobrir o motivo.

Segue o código:

                    <t:panelGroup>
                        <t:outputText value="* " styleClass="requiredField" />
                        <t:outputLabel for="cod_contrato" value="Código do Contrato" styleClass="label" />
                    </t:panelGroup>
                    <t:panelGroup colspan="3">
                        <t:outputText value="* " styleClass="requiredField" />
                        <t:outputLabel for="titular_contrato" value="Titular do Contrato" styleClass="label" />
                    </t:panelGroup>

                    <t:panelGroup  >
                        <h:inputText id="cod_contrato" value="#{ReservaMB.obj.idContrato.idTitBanstur}"
                                     styleClass="textField" size="10" maxlength="10" />
                        <a4j:commandButton image="images/refresh.gif" actionListener="#{ReservaMB.qryContratoByCodigo}"
                                           reRender="cod_contrato, titular_contrato, nome_usuario" focus="nome_usuario"
                                           ajaxSingle="true" process="cod_contrato" />
                        <h:message for="cod_contrato" styleClass="msgError" />
                    </t:panelGroup>
                    <t:panelGroup colspan="3" >
                        <h:inputText id="titular_contrato" value="#{ReservaMB.obj.idContrato.idCliente.nome}" styleClass="textField" size="50" maxlength="50" readonly="true" />
                        <h:commandButton image="images/find.gif" action="#{ReservaMB.selectContrato}" immediate="true" />
                    </t:panelGroup>

                    <t:panelGroup colspan="4" >
                        <h:outputText value="* " styleClass="requiredField" />
                        <h:outputLabel for="nome_usuario" value="Usuario" styleClass="label" />
                    </t:panelGroup>
                    <t:panelGroup colspan="4" >
                        <h:inputText id="nome_usuario" value="#{ReservaMB.obj.nomeUsuario}" styleClass="textField" size="80" maxlength="80" required="false"
                                     onkeyup="this.value = this.value.toUpperCase()" autocomplete="false" />
                        <h:message for="nome_usuario" styleClass="msgError"/>
                    </t:panelGroup>
    public void qryContratoByCodigo(ActionEvent evt) {
        try {
            Integer codContrato = this.getObj().getIdContrato().getIdTitBanstur();
            this.getObj().setIdContrato(ContratoDAO.findByIdTitBanstur(null, codContrato));
            this.getObj().setNomeUsuario(this.getObj().getIdContrato().getIdCliente().getNome());
        } catch (SystemException e) {
            this.getObj().setIdContrato(new ContratoVO());
            this.getObj().setNomeUsuario(null);
            FacesContext.getCurrentInstance().addMessage("cod_contrato", new FacesMessage("Contrato nao encontrado !"));
        }
    }

Log do glassfish:

PWC4011: Unable to set request character encoding to UTF-8 from context /bns_reservas, because request parameters have already been read, or ServletRequest.getReader() has already been called
sourceId=cod_contrato[severity=(INFO 0), summary=(Contrato nao encontrado !), detail=(Contrato nao encontrado !)];|WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=cod_contrato[severity=(INFO 0), summary=(Contrato nao encontrado !), detail=(Contrato nao encontrado !)]

O ajax atualiza todos os componentes do reRender, menos a mensagem de erro gerada no ManagedBean quando nenhum contrato é encontrado no banco.

Eu resolvi colocando na página de jsf que será exibida a mensagem, a tag


<h:messages errorClass=“erro” infoClass=“alerta” showDetail=“true” showSummary=“false”/>

Veja se resolve