不要在 <p:messages autoUpdate="true>> 中重新显示对话框中已显示的消息 [英] Don't redisplay messages already shown in dialog in <p:messages autoUpdate="true">
问题描述
I need to show error and warning messages in a dialog when it is showing. If dialog is not showing I need to show the messages in the container page
I have set a template using facelets in all views: template="/WEB-INF/templates/template.xhtml">
with this content:
<f:view locale="#{loginBB.localeCode}">
<p:messages autoUpdate="true" closable="true" id="globalMessages" />
<ui:insert name="content" />
</f:view>
In all dialogs I have the following:
<p:messages autoUpdate="true" closable="true" id="dialogMessages" />
When a dialog is showing the error messages appear in the dialog and in the view that hold it, but I need that only appears in the dialog.
What I am doing wrong? I don't know what to do
EDIT: According to the BalusC answer I did the following:
Template:
<f:view locale="#{loginBB.localeCode}">
<ui:insert name="dialogs" />
<p:messages autoUpdate="true" closable="true" redisplay="false" />
<ui:insert name="content" />
</f:view>
View:
<ui:define name="content">
...
</ui:define>
<ui:define name="dialogs">
<h:form id="formX">
<p:dialog ... >
</p:dialog>
</h:form>
</ui:define>
When the dialog is opened it show the message in the dialog. This is OK. But when the dialog is closed, it doesn't show the message in the main page
That gets tricky if the both <p:messages>
components have an autoUpdate="true"
. It would be doable if only the page's <p:messages>
is auto-updated. If you can ensure that the page's <p:messages>
appears in JSF component tree after the dialog's <p:messages>
, then it's a matter of setting the redisplay
attribute of page's <p:messages>
to false
and making sure that each of the dialog's actions updates the dialog's own form with therein the <p:messages>
.
<p:dialog>
<h:form>
<p:messages />
...
<p:commandButton ... update="@form" />
</h:form>
</p:dialog>
<p:messages autoUpdate="true" redisplay="false" />
No additional JS is necessary. You may only need to alter your templates to have an <ui:define name="dialogs">
above the page's <p:messages>
so that all your dialogs end up there. Or, alternatively, use CSS to position the page's <p:messages>
absolutely. Or, maybe, use JS to relocate the page's <p:messages>
to there where you'd like to have it in HTML DOM.
这篇关于不要在 <p:messages autoUpdate="true>> 中重新显示对话框中已显示的消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!