【问题标题】:Deleting FacesMessage from FacesContext从 FacesContext 中删除 FacesMessage
【发布时间】:2015-01-23 10:27:34
【问题描述】:

我这样添加 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

【问题讨论】:

  • Faces 消息是请求范围的,因此它们仅适用于单个请求/响应周期。需要手动删除它们吗?
  • 看起来只是时间问题。您究竟是在何时何地试图删除它们?此信息在问题中无处可见,因此世界上没有人能够在空白项目上重现您的问题。让我猜猜,您是否尝试在 呈现响应之后删除它们?如果代码(出于测试目的)直接放在addMessage() 之后,它是否有效?
  • @BalusC 感谢您清除消息是请求范围的。我已经解决了这个问题。正如你们俩建议的那样,这是一个时间问题
  • 好的,我会发布答案。但是,如果您实际编辑问题以包含有关您尝试删除它们的时间和地点的详细信息,那就更好了。

标签: jsf


【解决方案1】:

当面部消息已经呈现时,迭代器将为空。当渲染响应阶段已经发生时,这又会发生。这反过来表明您试图在渲染响应阶段之后将其删除。例如,在PhaseListener 内部,它与PhaseId.RENDER_RESPONSEafterPhase() 挂钩。

一种解决方案是将工作转移到beforePhase()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多