0

我正在尝试显示简单的消息,<p:messages/>但只有我得到的是 MyFaces 开发模式的消息。我会解释。

在我的 XHTML 页面上,我有以下代码来显示我的消息:

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

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

<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()and Faces.addError();
  • 用过的FacesMessage message = new FacesMessage();

以上都没有奏效。我不知道还能做什么。目前,我正在使用 MyFaces 2.1.12、Primefaces 4.0 和 Omnifaces 1.5。

4

1 回答 1

0

找到了解决方案。

当我使用 GET 请求和参数访问我的 XHTML 时,在@PostConstruct对页面上的托管 bean 进行“某些引用”之前不会调用 。因此,该标记<p:messages />被放置在对托管 bean 的第一个引用之前。当@PostConstruct被调用时,渲染消息已经太晚了。

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

这是@BalusC关于这个主题的一个很好的解释

于 2013-10-18T11:45:19.667 回答