2013-10-16 82 views
0

我试图用<p:messages/>显示简单消息,但只有我得到的是MyFaces开发模式的消息。我会解释。只显示消息:项目阶段[开发]:未处理消息

在我的XHTML页面,我有以下代码diplay我的留言:

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

在我的豆:

@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); 
    } 
} 

的问题是,通过Faces.addGlobalError()Faces.addError()添加的消息没有显示我的<p:messages.../>。该消息仅在开发模式的未处理消息上显示。看看,当我检查HTML:

<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> 

我已经尝试了一些其他的方法可以做到:

  • 只在XHTML将<p:messages/><h:messages>;
  • 试图使用Faces.addGlobalError()Faces.addError();
  • 使用FacesMessage message = new FacesMessage();

无上述工作。我不知道还有什么要做。目前,我正在使用MyFaces 2.1.12,Primefaces 4.0和Omnifaces 1.5。

+0

尝试取出'为= “msgCalls”'从上面'' SRy

+0

@SRy,感谢您的答复。我删除了'for =“msgCalls”'并再次尝试。没有成功。我将'Faces.addGlobalError()'改为'Faces.addError()'。没有成功。 –

回答

0

找到解决方案。

当我使用GET请求和参数访问我的XHTML时,@PostConstruct不会被调用,直到对页面上的托管bean进行“一些引用”为止。所以,标签<p:messages />被放置在托管bean的第一个引用之前。当调用@PostConstruct时,呈现消息已经太晚了。

解决的方法是在标记<p:messages />之前放置一个preRenderView并指向一个方法。甚至指向一个空的方法。托管bean将在<p:messages />之前构建,并且所有消息都将被渲染。

这里是一个nice explanation关于这个话题的@BalusC