JSF h:messages 渲染全局消息未重新渲染

Posted

技术标签:

【中文标题】JSF h:messages 渲染全局消息未重新渲染【英文标题】:JSF h:messages render global message is not rerendered 【发布时间】:2013-11-01 12:27:25 【问题描述】:

我正在尝试显示从 EJB 发送的全局错误消息:

FacesContext.getCurrentInstance().addMessage(
                    null,
                    new FacesMessage(FacesMessage.SEVERITY_ERROR,
                            "Please select a path first", "title"));

现在 JSF 有以下代码:

<h:messages globalOnly="true"/>

但是上面的方法不起作用,因为 JSF 页面没有重新呈现。 请注意,如果我用以下代码替换 JSF 代码,我可以使用 primefaces 完成上述工作:

<p:messages globalOnly="true" showDetail="true" autoUpdate="true" closable="true" />

但是我不想使用 primefaces,我想要一个纯 JSF 解决方案。 另请注意,我不希望 h:messages 出现在表单中,因为没有可单击的按钮,我希望 h:messages 从 EJB 自动更新,但不使用 primefaces。

【问题讨论】:

我是“一个”著名的莎拉.. 但不是你可能的意思:P 以防万一,您还可以使用&lt;x:commandButton&gt;AJAX 来更新不包含autoupdate="true"&lt;x:message&gt; 【参考方案1】:

您必须渲染 &lt;h:messages /&gt; 否则它不会显示。 您可以通过呈现来自 managedbean 的消息来实现这一点。

<h:messages id="globalMessage" />

在你的 managedBean 中,你放置一个代码来呈现你之后的消息

FacesContext.getCurrentInstance().addMessage(
                null,
                new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Please select a path first", "title"));

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds()
.add("globalMessage");

但请确保您具有要呈现的正确 ID。

【讨论】:

以上是关于JSF h:messages 渲染全局消息未重新渲染的主要内容,如果未能解决你的问题,请参考以下文章

验证通常失败时 JSF 中的条件样式

JSF2 - 为啥渲染响应不重新渲染组件设置?

JSF 重新渲染清除添加 onload 的 html 代码

JSF dataTable 重新渲染失去 CSS 样式

3DsMAX2016+vr4.1我最近渲染经常出现渲到building embree dynamic geometry tree的时候就直接渲染完成了?

由于上下文中未使用的属性,组件重新渲染