JSF消息持久性

JSF消息持久性,jsf,jsf-2,primefaces,managed-bean,Jsf,Jsf 2,Primefaces,Managed Bean,我有一个viewScoped bean,它具有一些业务逻辑验证。 我使用 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, result, null)); 问题是: 用户提交的表单无效 表单重新显示,由于使用PRG,未向用户显示消息 我使用以下代码行解决了这个问题: FacesContext.getCurrentInstance().getExternalContext().getFlas

我有一个viewScoped bean,它具有一些业务逻辑验证。 我使用

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, result, null));
问题是:

  • 用户提交的表单无效
  • 表单重新显示,由于使用PRG,未向用户显示消息
  • 我使用以下代码行解决了这个问题:

    FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
    
    现在的问题是业务逻辑验证消息持续时间过长:

  • 用户提交的表单无效
  • 重新显示带有错误消息的表单
  • 用户更正并提交有效表单
  • 表单重新显示,显示“成功”消息,但也显示以前的错误消息

  • 如何解决此问题?

    根据您的问题评论,您正在使用Mojarra 2.0.3:

    这真是一个古老的莫哈拉版本。它现在已经超过3.5岁了!(2010年7月发布)。您的具体问题是由2.0.7/2.1.4中修复的具体问题引起的。然而,之后有许多其他与flash示波器相关的问题报告。flash scope采用的是较旧的Mojarra版本,存在以下主要问题:

    总之,可以得出结论,您需要升级到Mojarra 2.1.27/2.2.5的最低版本,以消除所有这些问题


    记录器中的
    jsimplmanagementdeployer
    条目可以识别为JBoss 6.x中的条目。而古老的Mojarra 2.0.3则表明您仍然在使用第一个JBoss 6.0.0版本。这里面充满了bug,强烈建议升级到更新的JBoss服务器,不仅是为了修复那些Mojarra问题,还有很多其他问题。考虑升级到JBASS为7.3。x或EAP 6.2。如有必要,您可以根据以下答案中的说明升级其捆绑Mojarra:。

    您使用什么向用户显示错误消息。你能不能请大家分享一下可能是设置了一个超时的留言可以帮上忙。请共享消息组件。您是否暗示您正在执行动作验证方法,并且在不需要重定向时也调用
    Flash\setKeepMessages()
    ?你应该只在你真正需要重定向时才调用它。谢谢@vinayakpingle。我已更新。@BalusC是,我正在操作中执行验证。我正在发送重定向之前调用Flash#setKeepMessages():return(“myPage.jsf?faces redirect=true”);在一些Mojarra实现中,我们碰巧发现FlashScope中的消息比它们应该的更持久。您正在处理哪个JSF impl?
    [JSFImplManagementDeployer] Initialized 3 JSF configurations: [Mojarra-1.2, MyFaces-2.0, Mojarra-2.0]
    [javax.enterprise.resource.webcontainer.jsf.config] Initializing Mojarra 2.0.3 ( b05)