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