gpt4 book ai didi

xpages - 在 javascript-onbeforeunload 中调用 ssjs

转载 作者:行者123 更新时间:2023-12-04 05:08:58 25 4
gpt4 key购买 nike

我不太习惯 xpages 和 webprogramming,而且我被困在这里几天了。

有没有办法在 javascript-onbeforeunload-event 中调用服务器端 java 脚本?我要做的是在用户离开页面时删除notesview中的notesdocument。

例如:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<script language="JavaScript">
window.onbeforeunload = callSSJS;
function callSSJS(){
here I'd like to call a ssjs - f.eg.
var vw:NotesView = database.getview("anyview");
var doc:NotesDocument = vw.getDocumentByKey("123");
doc.remove(true);
}
</script>
</xp:view>

最佳答案

这可以通过 Jeremy Hodge 的 execOnServer 方法来实现:http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=88065536729EA065852578CB0066ADEC

首先在您的 XPage 中创建一个事件:

<xp:eventHandler event="onunload" id="onUnload" submit="false">
<xp:this.action>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
var vw:NotesView = database.getview("anyview");
var doc:NotesDocument = vw.getDocumentByKey("123");
doc.remove(true);
}]]></xp:this.script>
</xp:executeScript>
</xp:this.action>
</xp:eventHandler>

然后将 CSJS 输出脚本 block 添加到您的 XPage:
<xp:scriptBlock id="scriptBlockOnUnload">
<xp:this.value>
<![CDATA[

var executeOnServer = function () {

// must supply event handler id or we're outta here....
if (!arguments[0])
return false;

// the ID of the event handler we want to execute
var functionName = arguments[0];

// OPTIONAL - The Client Side ID that you want to partial refresh after executing the event handler
var refreshId = (arguments[1]) ? arguments[1] : "@none";
var form = (arguments[1]) ? XSP.findForm(arguments[1]) : dojo.query('form')[0];

// OPTIONAL - Options object contianing onStart, onComplete and onError functions for the call to the
// handler and subsequent partial refresh
var options = (arguments[2]) ? arguments[2] : {};

// Set the ID in $$xspsubmitid of the event handler to execute
dojo.query('[name="$$xspsubmitid"]')[0].value = form.id + ':' + functionName;
XSP._partialRefresh("post", form, refreshId, options);

}

window.onbeforeunload = function(){

if( ! dojo._xhr )
dojo._xhr = dojo.xhr;

dojo.xhr = function ( args, ioArgs, addArgs ){
ioArgs["sync"] = true;
ioArgs["failOk"] = true;
return dojo._xhr( args, ioArgs, addArgs );
}
executeOnServer('onUnload');
};
]]>
</xp:this.value>
</xp:scriptBlock>

最后一行是 unload 方法的钩子(Hook),它调用服务器端事件来删除文档。

编辑:

为同步调用和更好的故障处理添加了一个 dojo ioArgs。

关于xpages - 在 javascript-onbeforeunload 中调用 ssjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com