Диалог Primefaces не обновляется - PullRequest
1 голос
/ 21 ноября 2011

Возникла проблема с обновлением диалогового окна простых лиц

В настоящее время я отображаю диалоговое окно основных лиц с некоторыми элементами формы в редактируемом формате. Существуют некоторые текстовые поля, доступные для вывода, в форме со ссылкой изменения, доступной при нажатии на ссылку изменения, текстовые поля должны отображаться в редактируемом формате в диалоговом окне с кнопками «принять» и «отменить»

Ниже приведен фрагмент кода, который я использую, я вызываю слушателя, где я устанавливаю значения для свойств, которые будут отображаться в диалоговом окне в редактируемом формате, и каждый раз, когда я обновляю диалоговое окно, используя свойство render .

render = идентификатор диалога.

Также, когда я пытаюсь обновить содержимое внутри диалогового окна, я получаю некоторый идентификатор ошибки ajax, не найденный.

Я также пытался поместить диалог внутри панели, даже если это не работало.

            <h:panelGrid columns="5" >
            <h:outputText value="Overrride State Date" />
            <p:spacer width="5" height="5" />
            <h:outputText value="Overrride End Date" />
            <p:spacer width="5" height="5" />
            <h:outputText value="New Value"/>
            <p:calendar value="#{certInquiry.ovrStartDt}" showOn="button"/>
            <p:spacer width="5" height="5" />
            <p:calendar value="#{certInquiry.ovrEndDt}" showOn="button"/>
            <p:spacer width="5" height="5" />
            <h:inputText value="#{certInquiry.newVal}"/>
            </h:panelGrid>  
            <div align="center">
            <p:commandButton value="Accept"
                oncomplete="xyz.hide()" /> <p:spacer width="10"
                height="5" /> <p:commandButton value="Cancel"
                onclick="xyz.hide()" type="reset" /></div>

                </h:form>
        </p:dialog>

Здесь я обновляю диалоговое окно, используя свойство render, но не могу обновить диалоговое окно, в котором по-прежнему отображаются предыдущие данные, когда я обновляю экран, данные отображаются правильно.

Пожалуйста, помогите мне в решении этой проблемы.

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 21 ноября 2011

Вы пытаетесь с этим кодом:

<p:dialog widgetVar="xyz" >
   <p:panel id="xyzBody">
...
</p:panel>
</p:dialog>


<p:commandButton value="Open dialog"  oncomplete="xyz.show()"
    update="xyzBody"
     actionListener="fillFieldListener"  /> 
1 голос
/ 21 ноября 2011

Прежде всего, вы должны опубликовать entire xhtml-код, а не только содержание диалога и закрывающие теги ...

Однако я думаю, что знаю, в чем проблема: вы не должны использоватьrender атрибут для диалога, это функция JavaScript, show и hide более чем достаточно.Кроме того, вы должны знать, что you can't update something you haven't rendered, потому что неотрисованный компонент не может быть найден на html-странице (клиент / пользователь).Все, что вам нужно сделать, это:

    <h:form>
            <p:dialog id="myDialog" header="My Options" widgetVar="xyz" showEffect="fade" hideEffect="fade">

            <h:panelGrid columns="5" >
            <h:outputText value="Overrride State Date" />
            <p:spacer width="5" height="5" />
            <h:outputText value="Overrride End Date" />
            <p:spacer width="5" height="5" />
            <h:outputText value="New Value"/>
            <p:calendar value="#{certInquiry.ovrStartDt}" showOn="button"/>
            <p:spacer width="5" height="5" />
            <p:calendar value="#{certInquiry.ovrEndDt}" showOn="button"/>
            <p:spacer width="5" height="5" />
            <h:inputText value="#{certInquiry.newVal}"/>
            </h:panelGrid>  
            <div align="center">
            <p:commandButton value="Accept"
                oncomplete="xyz.hide()" /> <p:spacer width="10"
                height="5" /> <p:commandButton value="Cancel"
                onclick="xyz.hide()" type="reset" /></div>    
        </p:dialog>
<p:commandButton value="Update Dialog" action="#{MyBean.MyMethod}" update="MyDialog" />
</h:form>

Таким образом, ваша форма должна быть вне диалога, так лучше и проще;Как вы можете видеть, кнопка UpdateDialog находится вне диалогового окна и обновляет ваше диалоговое окно (но может также обновить панель внутри вашего диалогового окна) после запуска метода действия.Также я вижу, что эти кнопки «Принять» и «Отменить» предназначены только для проверки, потому что они делают то же самое без какой-либо реализации сервера ...

0 голосов
/ 15 января 2014

Я вижу одно закрытие, но не всю картинку, хотя я прошел этот путь и у меня есть для вас ответ.

Если у вас есть форма вне диалога, попробуйте расположить ее внутри диалога, вместо,Например,

<p:dialog ...>
    <h:form>
        ...contents...
    </h:form>
</p:dialog>
0 голосов
/ 13 января 2013

Ваш диалог внутри <ui:include> тега?

Если да, то проверьте источник или html вашей страницы и убедитесь, что диалог был добавлен на страницу только один раз. (возможно, для appendToBody установлено true)

У меня была эта проблема, когда диалог добавлялся в тело multiple times (возможно, из-за жизненного цикла JSF). что приведет к неожиданному результату, например, к диалогу, не получающему обновления.

Я решил это, удалив диалоговое окно за пределами <ui:include>, или вы можете условно отрендерить ваш <ui:include> content

PS: я полагаю, что вы следовали за другими ответами, такими как упаковка содержимого диалога внутри контейнера. И, как упомянул @spauny, вы должны опубликовать весь соответствующий код xhtml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...