Обновление StateSave таблицы данных продолжает запросы POST после закрытия диалога - PullRequest
1 голос
/ 25 июня 2019

Я использую плагин Data Tables jQuery на XPages для отображения нашего прайс-листа для пользователей. Администраторы прайс-листа ищут похожие товары, щелкают по описанию товара, чтобы изменить предмет через диалоговое окно. Поскольку в прайс-листе более 1000 позиций, необходимо сохранить результаты поиска и одновременно обновить таблицу, чтобы пользователь мог просмотреть изменения в списке после закрытия, прежде чем переходить к следующему элементу в своем поиске. Из-за большого количества записей обновление всей страницы является грязным, поэтому при открытии диалога я обновляю только диалог, который всегда работал нормально, пока я не ввел stateSave в DataTable. Проблема в том, что теперь, когда я закрываю диалоговое окно, страница продолжает делать POST-запросы, чтобы снова открыть диалоговое окно со случайным элементом из компонента.

Любая помощь будет принята с благодарностью.

<xp:div style="width:30%" styleClass="mg20">
    <xp:panel id="tablePanel">
                <table id="keyItemsPLTable">
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Code</th>
                    </tr>
                </thead>
                <tbody>
                    <xp:repeat id="repeat1" rows="10000"
                        var="rowData">
        <xp:this.value><![CDATA[#  #javascript:itemBean.getPlItems("All","Price List Sales Cat Only")}]]></xp:this.value>
                        <tr>
                            <td>
                                <xp:link escape="true"
                                    text="#{rowData.description}" id="link3">
                                    <xp:eventHandler event="onclick"
                                        submit="true" refreshMode="partial" refreshId="dialog1" execMode="partial"> //Problem occurs due to this partial refresh
                                        <xp:this.action><![CDATA[#{javascript:itemBean.setPlItem(rowData);
    var dialog = getComponent("dialog1");
    dialog.show()}]]></xp:this.action>
                                    </xp:eventHandler>
                                </xp:link>
                            </td>
                            <xp:text tagName="td" escape="true"
                                id="computedField1" value="#{rowData.code}">
                            </xp:text>
                        </tr>
                    </xp:repeat>
                </tbody>
            </table>

            <xp:scriptBlock>
                <xp:this.value><![CDATA[
        $(document).ready(function() {
         var table = $('#keyItemsPLTable').DataTable( {
             stateSave: true, //https://datatables.net/reference/option/stateSave
            stateDuration: -1//This doesn't seem to work. https://datatables.net/reference/option/stateDuration
            });
            });
          ]]></xp:this.value>
            </xp:scriptBlock>
            </xp:panel>
        </xp:div>


<xe:dialog id="dialog1">

        <xp:panel id="panelFullDialog" styleClass="mg20">
                <xp:div styleClass="mg20">
                    <xp:inputText id="inputDesc"
                        value="#{itemBean.plItem.description}" styleClass="wd200">
                    </xp:inputText>
                </xp:div>


                <xp:div styleClass="mg20">
                    <xp:inputText value="#{itemBean.plItem.code}"
                        id="inputText2" styleClass="wd200">
                    </xp:inputText>
                </xp:div>

                <xe:dialogButtonBar id="dialogButtonBar1">
                <xp:button value="Cancel" id="button4">
                    <xp:eventHandler event="onclick" submit="false">
                        <xp:this.script><![CDATA[XSP.closeDialog('#{id:dialog1}')]]></xp:this.script>
                    </xp:eventHandler>
                </xp:button>

                <xp:button id="button1">
                    <xp:this.value><![CDATA[Save & Close]]></xp:this.value>
                    <xp:eventHandler event="onclick" submit="true"  refreshMode="partial" refreshId="tablePanel">
                        <xp:this.action><![CDATA[#{javascript:itemBean.savePLItem();
var dialog = getComponent("dialog1");
dialog.hide();

                    }]]></xp:this.action>

                    </xp:eventHandler>
                </xp:button>
            </xe:dialogButtonBar>
        </xp:panel>
    </xe:dialog>

При закрытии запросов на публикацию продолжайте, пока диалоговое окно не появится, пока страница не закроется.

200 POST
instant.abc.co.uk testing.xsp? $$ ajaxid = view: _id1: tablePanel xhr html 35,47 кБ 426,05 кБ 2165 мс 200 POST
instant.abc.co.uk testing.xsp? $$ ajaxid = view: _id1: dialog1 xhr html 574 B 650 B 1969 мс 200 ПОЛУЧИТЬ instant.abc.co.uk testing.xsp? $$ ajaxid = view: _id1: dialog1: _content & $$ showdialog = true & $$ созданный = true & $$ creatialog = false & $$ viewid =! 6rftmmaw860jebb294nc4ay3y! xhr HTML 871 B 1,94 кБ 6 мс 200 POST
instant.abc.co.uk testing.xsp? $$ ajaxid = view: _id1: dialog1 xhr html 574 B 650 B 2057 мс 200 ПОЛУЧИТЬ instant.abc.co.uk testing.xsp? $$ ajaxid = view: _id1: dialog1: _content & $$ showdialog = true & $$ созданный = true & $$ creatialog = false & $$ viewid =! 6rftmmaw860jebb294nc4ay3y! xhr HTML 873 B 1,94 кБ 4 мс 200 POST
instant.networkconnect.co.uk testing.xsp? $$ ajaxid = view: _id1: dialog1 xhr html 574 B 650 B

1 Ответ

0 голосов
/ 11 июля 2019

Если вы пытаетесь обновить tablePanel после закрытия диалогового окна, не устанавливайте этот идентификатор обновления. Метод hide() принимает параметр области для обновления после закрытия диалога. Это связано с тем, что SSJS необходимо отправить обратно в браузер, чтобы сделать вызов, чтобы закрыть диалоговое окно, поэтому он передаст клиентский вызов JavaScript, чтобы выполнить запрос GET для обновления любого идентификатора, переданного в качестве параметра метода hide(). , Смотри https://www.intec.co.uk/xpages-dialog-control-and-partial-refreshes/.

...