p: сообщения отображаются, но исчезают почти мгновенно - PullRequest
0 голосов
/ 27 мая 2019

У меня странная проблема с тегом ap: message.На странице a есть таблица данных с данными из моей базы данных, которую я могу редактировать в диалоге ap :.После того, как все проверки пройдены успешно и обновление в базе данных выполнено, я обновляю dataTable и добавляю информацию о сообщении лиц для отображения результатов операции.Во внешнем интерфейсе я обновляю форму, которая содержит dataTable и диалоговое окно.Моя проблема в том, что сообщение отображается, но почти мгновенно исчезает.Это как тег сообщения обновляется с формой.Я не понимаю

Я пытался переместить тег сообщения в форму и из нее, ничего не изменилось.Я попытался настроить remoteCommand, чтобы обновить только dataTable и диалоговое окно, но это не сработало.

<p:messages autoUpdate="true" showDetail="true" severity="info,error" />
<h:form id="form">
    <p:dataTable
    style="width: 80%; margin-left: auto; margin-right: auto; text-align:center"
        var="achievement" value="#{achievementBean.listAchievement}">
    ...
    </p:dataTable>

    <p:dialog header="#{i18n['achievement']}" widgetVar="dlg"
        dynamic="true" closable="false" resizable="false" showEffect="fade"
        hideEffect="fade">
        <h:panelGroup id="achievementDetail">
            <p:messages autoUpdate="true" severity="warn" />
            ...
            <h:panelGrid columns="2" style="width: 100%; text-align:center">
                <p:commandButton value="#{i18n['general.submit']}"
                    icon="fa fa-check"
                    actionListener="#{achievementBean.submitAchievement}"
                    oncomplete="if(!args.validationFailed){updateForm();}" />
                <p:commandButton value="#{i18n['general.cancel']}"
                    icon="fa fa-close" action="#{achievementBean.submitCancel}"
                    oncomplete="PF('dlg').hide();" update="@form" process="@this" />
            </h:panelGrid>
            <p:remoteCommand name="updateForm" update="@form" />
        </h:panelGroup>
    </p:dialog>
</h:form>

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Ваша конкретная проблема сводится к следующему:

<p:messages autoUpdate="true" />

<h:form>
    <p:dataTable ...>
       ...
    </p:dataTable>
    ...
    <p:dialog>
        ...
        <p:commandButton
            action="#{achievementBean.submitAchievement}"
            oncomplete="if(!args.validationFailed){updateForm();}" />
        <p:remoteCommand name="updateForm" update="@form" />
    </p:dialog>
</h:form>
  • autoUpdate="true" автоматически обновляет компонент при каждом запросе AJAX.
  • <p:commandButton> вызывает AJAXзапрос, который добавляет сообщение и вызывает удаленную команду updateForm().Сообщение отображается в этом запросе ajax.
  • <p:remoteCommand> вызывает другой запрос ajax.Но это сообщение не добавляет никаких сообщений, поэтому в этом запросе ajax ничего не отображается.В результате сообщение, отображаемое в предыдущем запросе ajax, удаляется.

Вы можете использовать атрибут ignoreAutoUpdate компонента команды, чтобы он мог игнорировать любой компонент, поддерживающий autoUpdate.Итак, ваше решение:

<p:remoteCommand name="updateForm" update="@form" ignoreAutoUpdate="true" />

Тем не менее, почему у вас по-прежнему есть <p:dialog> и <p:dataTable> в одном и том же <h:form>?Похоже, что вы не приняли или не поняли рекомендацию в моем ответе на предыдущий вопрос p: commandButton не отключает p: dialog .Здесь я рекомендовал переместить <p:dialog> за пределы <h:form> и присвоить ему <h:form>.Это делает эти вещи намного проще в управлении.

Вы должны всегда дать <p:dialog> свой <h:form>.

<p:messages autoUpdate="true" />

<h:form>
    <p:dataTable ...>
       ...
    </p:dataTable>
    <p:remoteCommand name="updateForm" update="@form" ignoreAutoUpdate="true" />
</h:form>

<p:dialog widgetVar="dlg">
    <h:form>
        ...
        <p:commandButton
            action="#{achievementBean.submitAchievement}"
            update="@form"
            oncomplete="if(!args.validationFailed){PF('dlg').hide();updateForm();}" />
    </h:form>
</p:dialog>

См. Также:

0 голосов
/ 28 мая 2019

Спасибо за ваши ответы.Извините за меня, я всегда забываю об этом.Я постараюсь не забыть это в следующий раз.Мне наконец удалось решить мою проблему.

  • Я добавил идентификатор к первому <p:message>
  • Я добавил обновление этого идентификатора в отправку <p:commandButton>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...