Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mobile 移动应用程序页面是否可以确定它的移动应用程序页面名称以及所选内容?_Mobile_Xpages_Xpages Extlib_Xpages Ssjs - Fatal编程技术网

Mobile 移动应用程序页面是否可以确定它的移动应用程序页面名称以及所选内容?

Mobile 移动应用程序页面是否可以确定它的移动应用程序页面名称以及所选内容?,mobile,xpages,xpages-extlib,xpages-ssjs,Mobile,Xpages,Xpages Extlib,Xpages Ssjs,我的问题跟踪应用程序有几个类别(客户端、分配给、模块/类型、优先级、状态、构建等)。有几个视图有两个分类列(例如:Client和AssignedTo、Client和Module、AssignedTo和Priority、PPriority和Client等) 我正在使用XPages移动控件实现移动页面。我希望简化操作,以便移动主页上视图的选择会驱动到一个页面,用于选择适当的第一个类别,而这又会驱动到一个页面,用于选择第二个类别。我不清楚的是,一旦选择了第一个类别gories值完成,第二个类别选择页面

我的问题跟踪应用程序有几个类别(客户端、分配给、模块/类型、优先级、状态、构建等)。有几个视图有两个分类列(例如:Client和AssignedTo、Client和Module、AssignedTo和Priority、PPriority和Client等)

我正在使用XPages移动控件实现移动页面。我希望简化操作,以便移动主页上视图的选择会驱动到一个页面,用于选择适当的第一个类别,而这又会驱动到一个页面,用于选择第二个类别。我不清楚的是,一旦选择了第一个类别gories值完成,第二个类别选择页面打开,之前选择的值是多少

以下是我目前为止的示例页面:

<xe:singlePageApp
    id="singlePageApp1"
    selectedPageName="mhome">
    <xe:appPage
        id="appPage1"
        pageName="mhome">
        <xe:djxmHeading
            id="djxmHeading1"
            label="Home">
        </xe:djxmHeading>
        <xe:djxmRoundRectList
            id="djxmRoundRectList1">
            <xe:djxmLineItem
                id="djxmLineItem1"
                label="Issues by Client By Assigned To"
                moveTo="selectClient1">
            </xe:djxmLineItem>
            <xe:djxmLineItem
                id="djxmLineItem2"
                label="Issues by Client By Module"
                moveTo="selectClient2">
            </xe:djxmLineItem>
        </xe:djxmRoundRectList>
    </xe:appPage>
    <xe:appPage
        id="appPage2"
        pageName="selectClient1"
        resetContent="true">
        <xe:djxmHeading
            id="djxmHeading2"
            label="Select Client"
            moveTo="mhome"
            back="back">
        </xe:djxmHeading>
        <xp:panel>
            <xp:this.data>
                <xp:dominoView
                    var="view1"
                    viewName="ByClientAssignedTo">
                </xp:dominoView>
            </xp:this.data>
            <xe:djxmRoundRectList
                id="djxmRoundRectList2">
                <xp:repeat
                    id="repeat1"
                    rows="30"
                    value="#{javascript:view1.getColumnValues(0);}"
                    var="client"
                    indexVar="clidx">
                    <xe:djxmLineItem
                        id="djxmLineItem3"
                        label="#{javascript:client}"
                        moveTo="selectAssignedTo1">
                    </xe:djxmLineItem>
                </xp:repeat>
            </xe:djxmRoundRectList>
        </xp:panel>
    </xe:appPage>
    <xe:appPage
        id="appPage3"
        pageName="selectClient2"
        resetContent="true">
        <xe:djxmHeading
            id="djxmHeading3"
            label="Select Client (2)"
            moveTo="mhome"
            back="back">
        </xe:djxmHeading>
        <xp:panel>
            <xp:this.data>
                <xp:dominoView
                    var="view1"
                    viewName="ByClientAssignedTo">
                </xp:dominoView>
            </xp:this.data>
            <xe:djxmRoundRectList
                id="djxmRoundRectList3">
                <xp:repeat
                    id="repeat2"
                    rows="30"
                    value="#{javascript:view1.getColumnValues(0)}"
                    var="client"
                    indexVar="clidx">
                    <xe:djxmLineItem
                        id="djxmLineItem4"
                        label="#{javascript:client}"
                        moveTo="selectType1">
                    </xe:djxmLineItem>
                </xp:repeat>
            </xe:djxmRoundRectList>
        </xp:panel>
    </xe:appPage>
    <xe:appPage
        id="appPage4"
        pageName="selectAssignedTo1"
        resetContent="true">
        <xe:djxmHeading
            id="djxmHeading4"
            back="back"
            label="Select Assigned To"
            moveTo="selectClient1">
        </xe:djxmHeading>
        <xp:text
            escape="true"
            id="computedField1">
            <xp:this.value><![CDATA[#{javascript:"What was selected on the previous page?"}]]></xp:this.value>
        </xp:text>
    </xe:appPage>
</xe:singlePageApp>

技术1:
djxmLineItem事件支持onClick事件,尽管在Xpages中没有关于它的文档(我已经找到)。它作为dojox.mobile ListItem下dojo的一部分进行了文档记录

如有必要,为另一个控件创建onClick事件,并复制xe:djxmLineItem标记下的代码。您可以使用延迟求值(#)访问indexVar,以标识已单击重复中的哪个ListItem

添加事件处理程序的一个主要缺点是,您必须在目标页面内的某些内容上触发部分刷新,以便呈现其内容。这反过来意味着必须预加载页面内容,以便刷新目标可用。这很可能是当前mobile contro实现中的一个错误是的,但这可能会很痛苦

技巧2:
要跟踪页面和所选项目而不产生上述副作用,请不要添加事件处理程序。而是…创建listitem,以便将项目的“id”添加为moveTo属性的参数

例如:

<xe:djxmRoundRectList id="menuList">
  <xp:repeat value="#{compositeData.view.listItems}"
    var="listItem" indexVar="menuIndex" id="listRepeat" rows="999">
    <xe:djxmLineItem id="listItem"
      label="#{listItem.label}" moveTo="#{compositeData.view.moveTo}&amp;id=#{listItem.id}&amp;clear=true"
      rightText="#{listItem.rightText}">
    </xe:djxmLineItem>
  </xp:repeat>
</xe:djxmRoundRectList>

可以将以下代码添加到页面底部,为每个appPage的转换事件添加事件侦听器

<xp:scriptBlock id="scriptBlock1">
    <xp:this.value>
        <![CDATA[XSP.addOnLoad(function(){
          dijit.registry.byClass("extlib.dijit.mobile.View").forEach(function(widget, index, hash){
          dojo.connect(widget, "onBeforeTransitionOut", function(moveTo, dir, transition, context, method){
          var deferred = adminService.setMoveTarget(moveTo);
        });
      });
    });
  ]]>
  </xp:this.value>
</xp:scriptBlock>

事件处理程序正在调用一个jsonRpcService,该服务将细节传递给bean(在页面转换发生之前)


AdminSessionbean中的setMoveTarget()方法应该能够解析出参数,以识别所选项目并跟踪页面转换


注意:添加clear=true是一种确保页面内容仅在向前移动到某个页面时重置,而不是在向后移动到同一页面时重置的方法。

下面是修改方法的代码,该方法使用此警告

  • 视图仅在第一列上进行分类,但可能不需要这样做。页面使用“按列值筛选”来显示所选文档。这是因为除非我从视图中删除分类,否则子访问页面的“重复”控件将找不到多个值

  • 我在页面上使用了dataContext控件来定义将要显示的视图。它需要更高的复杂性,但目前还可以:

    <xp:this.dataContexts>
      <xp:dataContext
        var="viewListItems">
        <xp:this.value><![CDATA[#{javascript:
          try {
            var returnVal = [];
            returnVal.push({name:"Issues by Assigned To By Client", alias:"ByAssignedToClient", cats:["AssignedTo","Client"]});
            returnVal.push({name:"Issues by Assigned To By Module", alias:"ByAssignedToType", cats:["AssignedTo","Type"]});
            returnVal.push({name:"Issues by Client By Assigned To", alias:"ByClientAssignedTo", cats:["Client","AssignedTo"]});
            returnVal.push({name:"Issues by Client By Module", alias:"ByClientType", cats:["Client","Type"]});
            return returnVal;
          } catch(e) {
             _dump(e);
          }
        }]]></xp:this.value>
      </xp:dataContext>
    </xp:this.dataContexts>
    
    
    
  • 下面是移动控件:

    <xe:singlePageApp
            id="singlePageApp1"
            selectedPageName="mhome">
            <xe:appPage
                id="homeAppPage1"
                pageName="mhome">
                <xe:djxmHeading
                    id="djxmHeading1"
                    label="Home">
                </xe:djxmHeading>
                <xe:djxmRoundRectList id="djxmRoundRectList1">
                    <xp:repeat
                        id="repeat3"
                        rows="10"
                        var="listItem"
                        indexVar="liidx"
                        value="#{viewListItems}">
                        <xe:djxmLineItem
                            id="djxmLineItem5"
                            moveTo="selectCat"
                            label="#{javascript:listItem.name;}">
                            <xp:eventHandler
                                event="onClick"
                                submit="true"
                                refreshId="selectCatPagePanel"
                                refreshMode="partial">
                                <xp:this.action>
                                    <xp:actionGroup>
                                        <xp:executeScript script="#{javascript:sessionScope.m_selectedView = listItem;}"></xp:executeScript>
                                    </xp:actionGroup>
                                </xp:this.action>
                            </xp:eventHandler>
                        </xe:djxmLineItem>
                    </xp:repeat>
                </xe:djxmRoundRectList>
            </xe:appPage>
            <xe:appPage
                id="categoryAppPage2"
                pageName="selectCat"
                resetContent="true"
                preload="true">
                <xp:panel id="selectCatPagePanel">
                    <xp:this.data>
                        <xp:dominoView var="view1">
                            <xp:this.viewName><![CDATA[#{javascript:
    try{
        var ssview = sessionScope.m_selectedView;
        if(ssview == null) return "ByClientAssignedTo";
        return ssview.alias;
    } catch(e) {
        return "ByClientAssignedTo";
    }}]]></xp:this.viewName>
                        </xp:dominoView>
                    </xp:this.data>
                    <xe:djxmHeading
                        id="djxmHeading2"
                        moveTo="mhome"
                        back="back">
                        <xe:this.label><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "Select something";
    return "Select " + ssview.cats[0];
    }]]></xe:this.label>
                    </xe:djxmHeading>
                    <xp:text
                        escape="true"
                        id="computedField3">
                        <xp:this.value><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "View is nothing"
    return "View is: " + ssview.name;
    }]]></xp:this.value>
                    </xp:text>
                    <xe:djxmRoundRectList id="djxmRoundRectList2">
                        <xp:repeat
                            id="repeat1"
                            rows="30"
                            value="#{javascript:view1.getColumnValues(0);}"
                            var="catvalue"
                            indexVar="catidx">
                            <xe:djxmLineItem
                                id="djxmLineItem3"
                                label="#{javascript:catvalue}"
                                moveTo="selectSubcat">
                                <xp:eventHandler
                                    event="onClick"
                                    submit="true"
                                    refreshId="selectSubCatPagePanel"
                                    refreshMode="partial">
                                    <xp:this.action><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    ssview.selectedCat = catvalue
    sessionScope.m_selectedView = ssview;
    }]]></xp:this.action>
                                </xp:eventHandler>
                            </xe:djxmLineItem>
                        </xp:repeat>
                    </xe:djxmRoundRectList>
                </xp:panel>
            </xe:appPage>
            <xe:appPage
                id="subcatAppPage3"
                pageName="selectSubcat"
                preload="true"
                resetContent="true">
                <xp:panel id="selectSubCatPagePanel">
    
                    <xe:djxmHeading
                        id="djxmHeading3"
                        moveTo="selectCat"
                        back="back">
                        <xe:this.label><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "Select something";
    return "Select " + ssview.cats[1];}]]></xe:this.label>
                    </xe:djxmHeading>
                    <xp:text
                        escape="false"
                        id="computedField1">
                        <xp:this.value><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "blah blah";
    "View is: " + ssview.name +
    "<br/>" + ssview.cats[0] + ": " + ssview.selectedCat;
    }]]></xp:this.value>
                    </xp:text>
                    <xe:djxmRoundRectList id="djxmRoundRectList3">
                        <xp:repeat
                            id="repeat2"
                            rows="10"
                            var="subcatValue"
                            indexVar="catidx">
                            <xp:this.value><![CDATA[#{javascript://var vals = @Unique(view2.getColumnValues(1));
    //vals.sort();
    var vals = [];
    try{
        var ssview = sessionScope.m_selectedView;
        if(ssview==null) return vals;
        vals = @DbLookup("", ssview.alias, ssview.selectedCat, 2);
        return @Unique(vals);
    } catch(e) {
        return vals;
    }
    return vals;}]]></xp:this.value>
                            <xe:djxmLineItem
                                id="djxmLineItem1"
                                label="#{javascript:subcatValue}"
                                moveTo="showView">
                                <xp:eventHandler
                                    event="onClick"
                                    submit="true"
                                    refreshId="showViewPagePanel"
                                    refreshMode="partial">
                                    <xp:this.action><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return;
    ssview.selectedSubcat = subcatValue
    sessionScope.m_selectedView = ssview;
    }]]></xp:this.action>
                                </xp:eventHandler>
                            </xe:djxmLineItem>
                        </xp:repeat>
                    </xe:djxmRoundRectList>
                </xp:panel>
            </xe:appPage>
            <xe:appPage
                id="viewAppPage4"
                pageName="showView"
                preload="true"
                resetContent="true">
                <xp:panel id="showViewPagePanel">
                    <xe:djxmHeading
                        id="djxmHeading4"
                        moveTo="selectSubcat"
                        back="back">
                        <xe:this.label><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "asdaasd";
    ssview.name;}]]></xe:this.label>
                    </xe:djxmHeading>
                    <xp:text
                        escape="false"
                        id="computedField2">
                        <xp:this.value><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "blah blah";
    "View is: " + ssview.name +
    "<br/>" + ssview.cats[0] + ": " + ssview.selectedCat +
    "<br/>" + ssview.cats[1] + ": " + ssview.selectedSubcat;
    }]]></xp:this.value>
                    </xp:text>
                    <xe:dataView
                        id="dataView1"
                        columnTitles="true">
                        <xe:this.data>
                            <xp:dominoView var="view4">
                                <xp:this.viewName><![CDATA[#{javascript:
    try{
        var ssview = sessionScope.m_selectedView;
        if(ssview == null) return "ByClientAssignedTo";
        return ssview.alias;
    } catch(e) {
        return "ByClientAssignedTo";
    }}]]></xp:this.viewName>
                                <xp:this.keys><![CDATA[#{javascript:try{
        var ssview = sessionScope.m_selectedView;
        if(ssview == null) return ["xxx","yyy"];
        if(!ssview.selectedCat) return ["xxx"];
        if(!ssview.selectedSubcat) return [ssview.selectedCat]
        return [ssview.selectedCat, ssview.selectedSubcat];
        //return ssview.selectedCat;
    } catch(e) {
        return ["xxx","yyy"];
    }}]]></xp:this.keys>
                            </xp:dominoView>
                        </xe:this.data>
                        <xe:this.summaryColumn>
                            <xe:viewSummaryColumn
                                columnName="Subject"
                                columnTitle="Subject"
                                contentType="text">
                            </xe:viewSummaryColumn>
                        </xe:this.summaryColumn>
                    </xe:dataView>
                </xp:panel>
            </xe:appPage>
        </xe:singlePageApp>
    
    
    
    快乐编码


    Newbs

    ps:示例代码的功劳归Nathan Freeman所有,他开发了一个我们正在合作的项目。我的技术1工作得很好,谢谢。我将在稍后更新解决方案代码
    <xe:singlePageApp
            id="singlePageApp1"
            selectedPageName="mhome">
            <xe:appPage
                id="homeAppPage1"
                pageName="mhome">
                <xe:djxmHeading
                    id="djxmHeading1"
                    label="Home">
                </xe:djxmHeading>
                <xe:djxmRoundRectList id="djxmRoundRectList1">
                    <xp:repeat
                        id="repeat3"
                        rows="10"
                        var="listItem"
                        indexVar="liidx"
                        value="#{viewListItems}">
                        <xe:djxmLineItem
                            id="djxmLineItem5"
                            moveTo="selectCat"
                            label="#{javascript:listItem.name;}">
                            <xp:eventHandler
                                event="onClick"
                                submit="true"
                                refreshId="selectCatPagePanel"
                                refreshMode="partial">
                                <xp:this.action>
                                    <xp:actionGroup>
                                        <xp:executeScript script="#{javascript:sessionScope.m_selectedView = listItem;}"></xp:executeScript>
                                    </xp:actionGroup>
                                </xp:this.action>
                            </xp:eventHandler>
                        </xe:djxmLineItem>
                    </xp:repeat>
                </xe:djxmRoundRectList>
            </xe:appPage>
            <xe:appPage
                id="categoryAppPage2"
                pageName="selectCat"
                resetContent="true"
                preload="true">
                <xp:panel id="selectCatPagePanel">
                    <xp:this.data>
                        <xp:dominoView var="view1">
                            <xp:this.viewName><![CDATA[#{javascript:
    try{
        var ssview = sessionScope.m_selectedView;
        if(ssview == null) return "ByClientAssignedTo";
        return ssview.alias;
    } catch(e) {
        return "ByClientAssignedTo";
    }}]]></xp:this.viewName>
                        </xp:dominoView>
                    </xp:this.data>
                    <xe:djxmHeading
                        id="djxmHeading2"
                        moveTo="mhome"
                        back="back">
                        <xe:this.label><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "Select something";
    return "Select " + ssview.cats[0];
    }]]></xe:this.label>
                    </xe:djxmHeading>
                    <xp:text
                        escape="true"
                        id="computedField3">
                        <xp:this.value><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "View is nothing"
    return "View is: " + ssview.name;
    }]]></xp:this.value>
                    </xp:text>
                    <xe:djxmRoundRectList id="djxmRoundRectList2">
                        <xp:repeat
                            id="repeat1"
                            rows="30"
                            value="#{javascript:view1.getColumnValues(0);}"
                            var="catvalue"
                            indexVar="catidx">
                            <xe:djxmLineItem
                                id="djxmLineItem3"
                                label="#{javascript:catvalue}"
                                moveTo="selectSubcat">
                                <xp:eventHandler
                                    event="onClick"
                                    submit="true"
                                    refreshId="selectSubCatPagePanel"
                                    refreshMode="partial">
                                    <xp:this.action><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    ssview.selectedCat = catvalue
    sessionScope.m_selectedView = ssview;
    }]]></xp:this.action>
                                </xp:eventHandler>
                            </xe:djxmLineItem>
                        </xp:repeat>
                    </xe:djxmRoundRectList>
                </xp:panel>
            </xe:appPage>
            <xe:appPage
                id="subcatAppPage3"
                pageName="selectSubcat"
                preload="true"
                resetContent="true">
                <xp:panel id="selectSubCatPagePanel">
    
                    <xe:djxmHeading
                        id="djxmHeading3"
                        moveTo="selectCat"
                        back="back">
                        <xe:this.label><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "Select something";
    return "Select " + ssview.cats[1];}]]></xe:this.label>
                    </xe:djxmHeading>
                    <xp:text
                        escape="false"
                        id="computedField1">
                        <xp:this.value><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "blah blah";
    "View is: " + ssview.name +
    "<br/>" + ssview.cats[0] + ": " + ssview.selectedCat;
    }]]></xp:this.value>
                    </xp:text>
                    <xe:djxmRoundRectList id="djxmRoundRectList3">
                        <xp:repeat
                            id="repeat2"
                            rows="10"
                            var="subcatValue"
                            indexVar="catidx">
                            <xp:this.value><![CDATA[#{javascript://var vals = @Unique(view2.getColumnValues(1));
    //vals.sort();
    var vals = [];
    try{
        var ssview = sessionScope.m_selectedView;
        if(ssview==null) return vals;
        vals = @DbLookup("", ssview.alias, ssview.selectedCat, 2);
        return @Unique(vals);
    } catch(e) {
        return vals;
    }
    return vals;}]]></xp:this.value>
                            <xe:djxmLineItem
                                id="djxmLineItem1"
                                label="#{javascript:subcatValue}"
                                moveTo="showView">
                                <xp:eventHandler
                                    event="onClick"
                                    submit="true"
                                    refreshId="showViewPagePanel"
                                    refreshMode="partial">
                                    <xp:this.action><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return;
    ssview.selectedSubcat = subcatValue
    sessionScope.m_selectedView = ssview;
    }]]></xp:this.action>
                                </xp:eventHandler>
                            </xe:djxmLineItem>
                        </xp:repeat>
                    </xe:djxmRoundRectList>
                </xp:panel>
            </xe:appPage>
            <xe:appPage
                id="viewAppPage4"
                pageName="showView"
                preload="true"
                resetContent="true">
                <xp:panel id="showViewPagePanel">
                    <xe:djxmHeading
                        id="djxmHeading4"
                        moveTo="selectSubcat"
                        back="back">
                        <xe:this.label><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "asdaasd";
    ssview.name;}]]></xe:this.label>
                    </xe:djxmHeading>
                    <xp:text
                        escape="false"
                        id="computedField2">
                        <xp:this.value><![CDATA[#{javascript:
    var ssview = sessionScope.m_selectedView;
    if(ssview == null) return "blah blah";
    "View is: " + ssview.name +
    "<br/>" + ssview.cats[0] + ": " + ssview.selectedCat +
    "<br/>" + ssview.cats[1] + ": " + ssview.selectedSubcat;
    }]]></xp:this.value>
                    </xp:text>
                    <xe:dataView
                        id="dataView1"
                        columnTitles="true">
                        <xe:this.data>
                            <xp:dominoView var="view4">
                                <xp:this.viewName><![CDATA[#{javascript:
    try{
        var ssview = sessionScope.m_selectedView;
        if(ssview == null) return "ByClientAssignedTo";
        return ssview.alias;
    } catch(e) {
        return "ByClientAssignedTo";
    }}]]></xp:this.viewName>
                                <xp:this.keys><![CDATA[#{javascript:try{
        var ssview = sessionScope.m_selectedView;
        if(ssview == null) return ["xxx","yyy"];
        if(!ssview.selectedCat) return ["xxx"];
        if(!ssview.selectedSubcat) return [ssview.selectedCat]
        return [ssview.selectedCat, ssview.selectedSubcat];
        //return ssview.selectedCat;
    } catch(e) {
        return ["xxx","yyy"];
    }}]]></xp:this.keys>
                            </xp:dominoView>
                        </xe:this.data>
                        <xe:this.summaryColumn>
                            <xe:viewSummaryColumn
                                columnName="Subject"
                                columnTitle="Subject"
                                contentType="text">
                            </xe:viewSummaryColumn>
                        </xe:this.summaryColumn>
                    </xe:dataView>
                </xp:panel>
            </xe:appPage>
        </xe:singlePageApp>