在XPages中加载指示器页面完全刷新

在XPages中加载指示器页面完全刷新,xpages,loading,Xpages,Loading,我的一个XPage有很多设计元素。根据连接速度,页面加载的时间超过预期。我想创建一个指示器来显示登录用户“页面正在加载”。。。我做了部分刷新,效果很好,但我不能完全刷新。我一直在寻找解决办法。 我可以试试jquery、dojo或ajax 任何建议都很重要。 当做 C.A.您是如何做到这一点的将不取决于XPages。理解事件的顺序很重要 用户单击某个地方的链接以打开页面 浏览器向服务器发送请求 服务器接收请求并加载页面服务器端的组件树 服务器在PageLoad之前、PageLoad之后、Prefo

我的一个XPage有很多设计元素。根据连接速度,页面加载的时间超过预期。我想创建一个指示器来显示登录用户“页面正在加载”。。。我做了部分刷新,效果很好,但我不能完全刷新。我一直在寻找解决办法。 我可以试试jquery、dojo或ajax

任何建议都很重要。 当做
C.A.

您是如何做到这一点的将不取决于XPages。理解事件的顺序很重要

  • 用户单击某个地方的链接以打开页面
  • 浏览器向服务器发送请求
  • 服务器接收请求并加载页面服务器端的组件树
  • 服务器在PageLoad之前、PageLoad之后、PreforeRenderResponse事件之前运行
  • 服务器生成要发送到浏览器的HTML
  • 服务器在RenderResponse事件后运行
  • 服务器将生成的HTML传递到屏幕
  • 浏览器从服务器接收响应
  • 因此,向第2步浏览器请求的目标XPage添加任何内容都不会产生效果。在将请求发送到浏览器之前,您需要在步骤1的客户端执行一些操作。如果您想一想您是如何为部分刷新完成的,以及发生了什么,那么它在触发部分刷新之前再次运行CSJS,这是相同的过程


    如果用户来自外部,唯一的选择是首先将他们发送到重定向网页,呈现该网页,然后以编程方式继续运行步骤1。

    如何执行此操作将不取决于XPages。理解事件的顺序很重要

  • 用户单击某个地方的链接以打开页面
  • 浏览器向服务器发送请求
  • 服务器接收请求并加载页面服务器端的组件树
  • 服务器在PageLoad之前、PageLoad之后、PreforeRenderResponse事件之前运行
  • 服务器生成要发送到浏览器的HTML
  • 服务器在RenderResponse事件后运行
  • 服务器将生成的HTML传递到屏幕
  • 浏览器从服务器接收响应
  • 因此,向第2步浏览器请求的目标XPage添加任何内容都不会产生效果。在将请求发送到浏览器之前,您需要在步骤1的客户端执行一些操作。如果您想一想您是如何为部分刷新完成的,以及发生了什么,那么它在触发部分刷新之前再次运行CSJS,这是相同的过程


    如果用户来自外部,唯一的选择是首先将他们发送到重定向网页,呈现该网页,然后以编程方式继续运行步骤1。

    我还没有为其制作专门的说明9,但我在本TLCC网络研讨会中演示了一种技术。
    相关部分从26分钟开始

    我是在加载页面的首字母时这样做的,但我相信如果您已经在页面上,我可以调整它以进行完全刷新

    基本概念是在页面加载时,实际上不加载任何长时间运行的数据。您只需发送页面的shell,然后在onClientLoad事件中触发部分刷新

    
    第1页
      -  标题UI显示在这里。。。。
    -
    

    这是一个演示页面。要查看的内容是添加的dojo资源,事实上,我从隐藏“MainContent”变量开始,然后是结束onClientLoad位

    因此页面会加载,但生成repeat控件的数据不会运行,因为它位于未呈现的面板中。因此,用户可以立即访问该页面。然后onClientLoad启动,它显示一个“请等待”类型的东西,然后运行函数获取数据。
    数据完成后,我设置scopedVariable以显示mainContent区域,然后触发endAjaxLoading内容,然后显示所有内容。

    我还没有为其制作专门的说明,但我在本TLCC网络研讨会上演示了一项技术。
    相关部分从26分钟开始

    我是在加载页面的首字母时这样做的,但我相信如果您已经在页面上,我可以调整它以进行完全刷新

    基本概念是在页面加载时,实际上不加载任何长时间运行的数据。您只需发送页面的shell,然后在onClientLoad事件中触发部分刷新

    
    第1页
      -  标题UI显示在这里。。。。
    -
    

    这是一个演示页面。要查看的内容是添加的dojo资源,事实上,我从隐藏“MainContent”变量开始,然后是结束onClientLoad位

    因此页面会加载,但生成repeat控件的数据不会运行,因为它位于未呈现的面板中。因此,用户可以立即访问该页面。然后onClientLoad启动,它显示一个“请等待”类型的东西,然后运行函数获取数据。
    当数据完成时,我设置了一个scopedVariable,然后显示mainContent区域,然后触发endAjaxLoading内容,然后显示所有内容。

    我认为这不是特定于XPages的。你试过什么?这可能有助于你开始:在我开始之前,我正试图理解其中的逻辑。我现在制作了一集笔记,我相信它直接回答了这个问题。你可以在这里找到:我不认为这是特定于XPages的。你试过什么?这可能有助于你开始:在我开始之前,我正试图理解其中的逻辑。我现在制作了一集笔记,我相信它直接回答了这个问题。你可以在这里找到它:一个g
    <xp:this.resources>
        <xp:script src="/xpUtilities.jss" clientSide="false"></xp:script>
        <xp:dojoModule name="extlib.dijit.ExtLib"></xp:dojoModule>
        <xp:dojoModule name="extlib.dijit.Loading"></xp:dojoModule>
        <xp:styleSheet href="/app.css"></xp:styleSheet>
    </xp:this.resources>
    Page 1
    
    
    <xp:this.beforePageLoad><![CDATA[#{javascript:viewScope.put("vsHasData", false);}]]></xp:this.beforePageLoad>
    &#160;&#160;-&#160;&#160;Header UI goes here....<xp:br></xp:br>
    <xp:br></xp:br>
    
    <xp:br></xp:br>
    
    <xp:panel id="MainContentWrapper">
    <xp:panel id="MainContent">
    
        <xp:this.rendered><![CDATA[#{javascript:return viewScope.get("vsHasData");}]]></xp:this.rendered>
        <xp:br></xp:br>
    
        <xp:repeat id="repeat1" rows="100" var="rowData"
            indexVar="rowIdx">
            <xp:this.value><![CDATA[#{javascript:viewScope.get("vsStateMap").keySet()}]]></xp:this.value>
            <xp:text escape="true" id="computedField2"
                value="#{rowData}">
            </xp:text>
            -
            <xp:text escape="true" id="computedField3">
                <xp:this.value><![CDATA[#{javascript:viewScope.get("vsStateMap").get(rowData)}]]></xp:this.value>
                <xp:this.converter>
                    <xp:convertNumber type="number"
                        integerOnly="true">
                    </xp:convertNumber>
                </xp:this.converter>
            </xp:text>
            <xp:br></xp:br>
        </xp:repeat>
        <xp:br></xp:br>
        <xp:br></xp:br>
    </xp:panel>
    </xp:panel>
    <xp:eventHandler event="onClientLoad" submit="true" refreshMode="partial" refreshId="MainContentWrapper">
        <xp:this.action><![CDATA[#{javascript:return getStateTotals();}]]></xp:this.action>
        <xp:this.onStart><![CDATA[XSP.startAjaxLoading("Calculating State Totals. This may take a few moments.")]]></xp:this.onStart>
        <xp:this.onComplete><![CDATA[XSP.endAjaxLoading()]]></xp:this.onComplete>
        <xp:this.onError><![CDATA[XSP.endAjaxLoading()]]></xp:this.onError>
    </xp:eventHandler>