Javascript XPages progressbar无法按预期使用服务器页面持久性设置;将页面保留在内存中”;
我想使用Mark Leusnik(感谢他)非常好的实现。不幸的是,这个实现对我不起作用 经过一些调查,我找到了问题的原因:在我的xpage应用程序中,我有服务器页面持久性设置Javascript XPages progressbar无法按预期使用服务器页面持久性设置;将页面保留在内存中”;,javascript,dojo,xpages,lotus-domino,Javascript,Dojo,Xpages,Lotus Domino,我想使用Mark Leusnik(感谢他)非常好的实现。不幸的是,这个实现对我不起作用 经过一些调查,我找到了问题的原因:在我的xpage应用程序中,我有服务器页面持久性设置将页面保留在内存中。Mark Leusnik的设置是将页面保留在磁盘上。我不知道,为什么这个设置会影响进度条的运行时行为 所有设置都可以正常工作将页面保留在磁盘上: 不幸的是,没有设置将页面保留在内存中: 提前感谢您提供的任何解决方案、解决方法或替代方案 工作解决方案(但是,欢迎使用其他解决方案、想法等,用于长时间运
将页面保留在内存中
。Mark Leusnik的设置是将页面保留在磁盘上
。我不知道,为什么这个设置会影响进度条的运行时行为
所有设置都可以正常工作将页面保留在磁盘上
:
不幸的是,没有设置
将页面保留在内存中
:
提前感谢您提供的任何解决方案、解决方法或替代方案 工作解决方案(但是,欢迎使用其他解决方案、想法等,用于长时间运行的代码进度条) 经过进一步的研究,我找到了一个独立于服务器页面持久性设置的解决方案(
将页面保留在内存中/将页面保留在磁盘上
)
我的解决方案的关键点是为服务器端任务实现一个额外的XAgent,而不是在按钮的onClick事件
中运行代码。此外,此XAgent将在进度条的开始例程中“启动”(dojo.xhrGet
)
在Mark Leusnik的书中,我做了以下更改:
demo.xsp-XPage
<xp:button value="Start a (fake) long running process"
id="button1" dojoType="dijit.form.Button">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[xProgress.start();]]></xp:this.script>
</xp:eventHandler>
</xp:button>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
<xp:this.afterRenderResponse><![CDATA[#{javascript: print("long running code started");
print( "browser: " + context.getUserAgent().getBrowser() + ",
remote IP: " + facesContext.getExternalContext().getRequest().getRemoteAddr());
updateProgress(0);
/*java.lang.Thread.sleep(750);
updateProgress(5);
java.lang.Thread.sleep(750);
updateProgress(10);
java.lang.Thread.sleep(750);
updateProgress(15);
java.lang.Thread.sleep(750);
updateProgress(20);
java.lang.Thread.sleep(750);
updateProgress(25);
java.lang.Thread.sleep(750);
updateProgress(30);
java.lang.Thread.sleep(2000);
updateProgress(50);
java.lang.Thread.sleep(1500);
updateProgress(60);
java.lang.Thread.sleep(1500);
updateProgress(75);
java.lang.Thread.sleep(1500);
updateProgress(80);
java.lang.Thread.sleep(1500);
updateProgress(90);
java.lang.Thread.sleep(1500);
updateProgress(100);*/
print("long running code stopped");
function updateProgress(to) {
progressPercentage = to;
synchronized(sessionScope) {
sessionScope.put("progress", to);
}
}}]]></xp:this.afterRenderResponse>
</xp:view>
export.xsp-XAgent(新的)
我找到了一个变通方法(xsp.session.transient=true),但对我来说并不可行,因为我认为此设置对我的整个应用程序有意外的影响。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
<xp:this.afterRenderResponse><![CDATA[#{javascript: print("long running code started");
print( "browser: " + context.getUserAgent().getBrowser() + ",
remote IP: " + facesContext.getExternalContext().getRequest().getRemoteAddr());
updateProgress(0);
/*java.lang.Thread.sleep(750);
updateProgress(5);
java.lang.Thread.sleep(750);
updateProgress(10);
java.lang.Thread.sleep(750);
updateProgress(15);
java.lang.Thread.sleep(750);
updateProgress(20);
java.lang.Thread.sleep(750);
updateProgress(25);
java.lang.Thread.sleep(750);
updateProgress(30);
java.lang.Thread.sleep(2000);
updateProgress(50);
java.lang.Thread.sleep(1500);
updateProgress(60);
java.lang.Thread.sleep(1500);
updateProgress(75);
java.lang.Thread.sleep(1500);
updateProgress(80);
java.lang.Thread.sleep(1500);
updateProgress(90);
java.lang.Thread.sleep(1500);
updateProgress(100);*/
print("long running code stopped");
function updateProgress(to) {
progressPercentage = to;
synchronized(sessionScope) {
sessionScope.put("progress", to);
}
}}]]></xp:this.afterRenderResponse>
</xp:view>