我正在XPages上使用Data Tables jQuery插件向用户显示我们的价格表。价目表的管理员搜索相似的物料,单击物料描述以通过对话框修改物料。由于价格列表中有1000多个项目,因此有必要保存搜索并同时刷新表格,以便用户在关闭后可以查看列表中的更改,然后再移至其搜索中的下一个项目。由于刷新条目的数量很大,因此整个页面很混乱,因此在打开对话框时,我只刷新对话框,在我将DataSave引入stateSave之前,该对话框一直运行良好。现在的问题是,当我关闭对话框时,页面继续发出POST请求,以使用Bean中的随机项再次打开对话框。
任何帮助将不胜感激。
<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 kB 426.05 kB 2165 ms
200
POST
Instant.abc.co.uk testing.xsp?$$ ajaxid = view:_id1:dialog1 xhr html 574 B 650 B 1969 ms
200
得到
Instant.abc.co.uk testing.xsp?$$ ajaxid = view:_id1:dialog1:_content&$$ showdialog = true&$$ created = true&$$ createdialog = false&$$ viewid =!6rftmmaw860jebb294nc4ay3y! xhr html 871 B 1.94 kB
6毫秒
200
POST
Instant.abc.co.uk testing.xsp?$$ ajaxid = view:_id1:dialog1 xhr html 574 B 650 B 2057 ms
200
得到
Instant.abc.co.uk testing.xsp?$$ ajaxid = view:_id1:dialog1:_content&$$ showdialog = true&$$ created = true&$$ createdialog = false&$$ viewid =!6rftmmaw860jebb294nc4ay3y! xhr html 873 B 1.94 kB
4毫秒
200
POST
Instant.networkconnect.co.uk testing.xsp?$$ ajaxid = view:_id1:dialog1 xhr html 574 B 650 B
答案 0 :(得分:0)
如果在关闭对话框后尝试刷新@Column
,请不要使用刷新ID。 tablePanel
方法使用该区域的参数在对话框关闭后刷新。这是因为SSJS需要回传到浏览器才能进行调用以关闭对话框,因此它将传递客户端JavaScript调用以发出GET请求来刷新作为{{1}参数传递的ID } 方法。参见https://www.intec.co.uk/xpages-dialog-control-and-partial-refreshes/。