Javascript XPages progressbar无法按预期使用服务器页面持久性设置;将页面保留在内存中”;

Javascript XPages progressbar无法按预期使用服务器页面持久性设置;将页面保留在内存中”;,javascript,dojo,xpages,lotus-domino,Javascript,Dojo,Xpages,Lotus Domino,我想使用Mark Leusnik(感谢他)非常好的实现。不幸的是,这个实现对我不起作用 经过一些调查,我找到了问题的原因:在我的xpage应用程序中,我有服务器页面持久性设置将页面保留在内存中。Mark Leusnik的设置是将页面保留在磁盘上。我不知道,为什么这个设置会影响进度条的运行时行为 所有设置都可以正常工作将页面保留在磁盘上: 不幸的是,没有设置将页面保留在内存中: 提前感谢您提供的任何解决方案、解决方法或替代方案 工作解决方案(但是,欢迎使用其他解决方案、想法等,用于长时间运

我想使用Mark Leusnik(感谢他)非常好的实现。不幸的是,这个实现对我不起作用

经过一些调查,我找到了问题的原因:在我的xpage应用程序中,我有服务器页面持久性设置
将页面保留在内存中
。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>