2013-10-16 1 views
0

J'essaie d'afficher des messages simples avec <p:messages/> mais seulement j'ai le message du mode de développement de MyFaces. Je vais expliquer.Afficher uniquement les messages avec: Project Stage [Développement]: messages non gérées

Sur ma page XHTML, j'ai le code suivant pour diplay mes messages:

<div class="messagePanel"> 
    <p:messages id="msgCalls" 
       for="msgCalls" 
       showDetail="true" 
       showSummary="true" 
       autoUpdate="true" 
       closable="true" /> 
</div> 

Sur mon haricot:

@PostConstruct 
public void init() { 
    try { 
     this.linhaCelularId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("linhaCelularId"); 

     if (this.linhaCelularId == null || this.linhaCelularId.trim().isEmpty()) { 
      Messages.addGlobalError(MENSAGEM_GLOBAL, "Nenhum celular especificado para listagem de ligações"); 
     } 
     else { 
      this.linhaCelularTitular = getLinhaCelularTitularService().getById(Long.parseLong(this.linhaCelularId)); 

      if (this.linhaCelularTitular == null) { 
       Messages.addGlobalError(MENSAGEM_GLOBAL, "Celular não encontrado!"); 
      } 
      else if (!this.linhaCelularTitular.getResponsavel().getAn8().equals(this.loginMB.getLoggedUser().getAn8())) { 
       Messages.addGlobalError(MENSAGEM_GLOBAL, "Você não tem permissão para acessar essa página. Esse erro foi reportado."); 
      } 
      else { 
       this.faturaTitular = getFaturaTitularService().getUltimaFaturaCarregada(); 
       this.itensFaturaTitular = getFaturaTitularService().getItensFaturaPorCelularFatura(this.linhaCelularTitular, this.faturaTitular); 
      } 
     } 
    } 
    catch (ServiceException e) { 
     logger.error("Erro ao buscar ultima fatura carregada", e); 
     throw new RuntimeException(e); 
    } 
} 

Le problème est que le message ajouté par Faces.addGlobalError() ou Faces.addError() est ne s'affiche pas par <p:messages.../>. Le message n'apparaît que sur Messages non gérés du mode développement. Jetez un oeil quand je le HTML inspecte:

<ul id="javax_faces_developmentstage_messages" 
    title="Project Stage[Development]: Unhandled Messages" 
    style="color:orange"> 
    <li> 
     <span title="Project Stage[Development]: Unhandled Messages">Você não tem permissão para acessar essa página. Esse erro foi reportado.</span> 
    </li> 
</ul> 

je l'ai déjà essayé d'autres façons de le faire:

  • Mettez seulement <p:messages/> et <h:messages> sur XHTML; Essayé d'utiliser Faces.addGlobalError() et Faces.addError();
  • occasion FacesMessage message = new FacesMessage();

Aucune ci-dessus travaillé. Je ne sais pas quoi faire d'autre. Actuellement, j'utilise MyFaces 2.1.12, Primefaces 4.0 et Omnifaces 1.5.

+0

Essayez de prendre des 'for = "msgCalls"' 'en haut ' – SRy

+0

@SRy, Merci pour votre réponse. J'ai enlevé 'for =" msgCalls "' et j'ai essayé à nouveau. Sans succès. J'ai changé 'Faces.addGlobalError()' en 'Faces.addError()'. Pas de succès aussi. –

Répondre

0

Trouvé la solution. Lorsque j'accède à ma requête XHTML avec la requête GET et les paramètres, le @PostConstruct n'est pas appelé jusqu'à ce que "une référence" à la page du bean géré soit faite. Ainsi, l'étiquette <p:messages /> a été placée avant la première référence au bean géré. Lorsque le @PostConstruct a été appelé, il était déjà trop tard pour rendre les messages.

La solution consiste à mettre le preRenderView avant l'étiquette <p:messages /> et pointer vers une méthode. Même pour pointer vers une méthode vide. Le bean géré sera construit avant le <p:messages /> et tous les messages seront rendus.

Voici un nice explanation sur ce sujet par @BalusC

Questions connexes