从FacesContext中删除FacesMessage

时间:2015-01-23 10:27:35

标签: jsf

我以这种方式添加FacesMessages

FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(severity, message, null));

我尝试以这种方式删除它们

FacesContext context = FacesContext.getCurrentInstance()
Iterator<FacesMessage> it = context.getMessages();
while (it.hasNext()) {
    FacesMessage message = it.next();
    if (message.getSeverity() == FacesMessage.SEVERITY_WARN) {
            it.remove();
    }

}

此迭代器始终为空且消息多次累积和显示的问题。我也知道this solution

1 个答案:

答案 0 :(得分:0)

当面部消息已经呈现时,迭代器将为空。当渲染响应阶段已经发生时,这将发生。这反过来表明你试图在渲染响应阶段之后删除它。例如,位于PhaseListener afterPhase()内的PhaseId.RENDER_RESPONSE内。

一种解决方案是将作业移至beforePhase()