JSF 消息持久化

标签 jsf jsf-2 primefaces managed-bean

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

将此验证产生的错误显示到页面上
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, result, null));

问题是:

  1. 用户提交无效表单
  2. 表单重新显示,由于使用 PRG,消息未向用户显示

我使用以下代码行解决了这个问题:

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);

现在的问题是业务逻辑验证消息持续时间太长:

  1. 用户提交无效表单
  2. 重新显示表单并显示错误消息
  3. 用户更正并提交有效的表单
  4. 表单重新显示,并显示“成功”消息,但也显示之前的错误消息。

我该如何解决这个问题?

最佳答案

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

[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)

这确实是一个古老的 Mojarra 版本。目前已经3.5岁多了! (2010 年 7 月发布)。您的具体问题是由具体 issue 1751 引起的在 2.0.7/2.1.4 中已修复。然而,随后出现了许多与闪存范围相关的其他问题报告。 Flash 范围位于较旧的 Mojarra 版本中,存在以下主要问题:

总而言之,结论是您需要至少升级到 Mojarra 2.1.27/2.2.5 才能摆脱所有这些问题。

记录器中的 JSFImplManagementDeployer 条目可被识别为 JBoss 6.x 中的条目。古老的 Mojarra 2.0.3 反过来表明您仍在使用第一个 JBoss 6.0.0 版本。这充满了错误,强烈建议升级到更新的 JBoss 服务器,不仅可以修复这些 Mojarra 问题,还可以修复许多其他问题。考虑升级到 JBoss AS 7.3.x 或 EAP 6.2.x。如有必要,您可以根据此答案中的说明升级其捆绑的 Mojarra:Upgrade JSF / Mojarra in JBoss AS / EAP / WildFly .

关于JSF 消息持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21168059/

相关文章:

java - 自定义在 h :ajax call 之后响应

date - 第二天使用日历 JSF primefaces 检查

同一 jsp 中的 Java beans 多个实例

java - 在 JavaScript 中动态创建 PrimeFaces 对话框并传递一些数据

java - 如何使用 <p :ajax> inside <p:tree> of primefaces?

java - 如何使用带有 <h :commandLink/>? 的锚定系统

java - JSF 每个用户一个 session

java - jsf 中的绝对路径不起作用

jsf - 如何将参数传递给 preRenderView 事件监听器

jsf-2 - p :commandButton ajax not called inside p:dataList