是否可以使用JSF2在所有AJAX调用上自动重新呈现h:消息?

时间:2014-02-20 16:01:02

标签: ajax jsf-2 messages jsf-2.2

我在JSF2项目的每个页面上使用h:messages标记来显示全局消息。我也主要使用AJAX来更新页面内容。就像现在一样,我必须在每个AJAX标记的“render”属性中包含h:messages标记的ID,以便它显示由于该AJAX调用而产生的任何消息。我想知道,有什么方法可以让我自己避免这样做到每个AJAX标签,只是告诉它总是自动刷新任何AJAX调用的消息?

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用 Primefaces 及其<p:messages />组件。使用autoUpdate="true"可以让您每次都更新消息组件。

或者,如果不打算使用Primefaces并且希望每次都不必声明h:messages id,则可以使用支持端更新。只需实现一个JSF PhaseListener,它监听INVOKE_APPLICATION阶段并在事件发生后呈现你的组件:

public class JsfPhaseListener implements PhaseListener {

    @Override
    public void afterPhase(PhaseEvent event) {
        FacesContext.getCurrentInstance().getPartialViewContext()
                .getRenderIds().add("header:messages");
    }

    @Override
    public void beforePhase(PhaseEvent event) {

    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.INVOKE_APPLICATION;
    }

}

这将导致您的header:messages组件在您发出的每个请求中呈现。

另见: