如何在Xpages

时间:2015-07-06 13:54:07

标签: xpages xpages-extlib

我一直致力于使applicationLayout自定义控件更具动态性,因此我可以更轻松地构建和扩展Xpages应用程序。

为此,我现在正在使用切换面,这非常有用。

我还想对应用程序链接,标题链接和导航条目进行软编码。

我想我可以构建一个数据结构,我只需要放置我想要的值,然后从中加载大部分应用程序布局。

所以我将在范围变量中有一组设备,如下所示:

“App 1”,“App 2”,“App 3”等

然后对于Title,我必须有这样的东西:

“App 1”,“Title Bar 1”,“Title Bar 2”,“Title Bar 3”, “App 2”,“Title Bar 1”,“Title Bar 2”,“Title Bar 3”,“Title Bar 4" “App 2”,“Title Bar 1”,

因此第一个Application Link将有三个标题栏,第二个是4,等等。

然后是导航:

“App 1”,“Title Bar 1”,“Nav 1”,Nav 2" “App 1”,“Title Bar 1”,“Nav 1”,“Nav 2”,“Nav 3"

等等。

如果我这样做,那么我认为布局应用程序非常容易。

我的问题是最好使用哪种数据结构?我应该使用三个数组还是三维数组?

=============================================== ==================== Knut的答案很棒,但我似乎无法遍历阵列。

var lenArr:Integer = sessionScope.apps.length;
for (i=0; i < lenArr;++i)
{sessionScope.apps[i].app}

当我在session.Scope变量上执行一个长度时,它返回一个3,但是当我遍历数组时,当i = 2时它返回null。我的阵列中只有2个项目,至少应该有。这是sessionScope的代码。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    rendered="false"
    viewState="nostate"
    xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:this.afterPageLoad><![CDATA[#{javascript:sessionScope.apps = 
     [
      { app: "xpApp1",
        titleBars: [
                    {titleBar: "ccApp1Title1",
                     navs: ["ccNavApp11Title1Nav1"]
                    },
                    {titleBar: "ccApp1Title1",
                     navs: ["ccNavApp11Title1Nav2"]
                    }
                   ]
      },
     { app: "xpApp2",
        titleBars: [
                    {titleBar: "ccApp2Title1",
                    navs: ["ccNavApp21Title1Nav1"]
                    },
                    {titleBar: "ccApp2Title2",
                    navs: ["ccNavApp21Title2Nav1"]
                    }
                     {titleBar: "ccApp2Title3",
                    navs: ["ccNavApp21Title3Nav1"]
                    }
                   ]
      },
    ];
//Now set the selected values
sessionScope.appSelected = "xpApp1";
sessionScope.titleSelected = "ccApp1Title1";
sessionScope.navSelected = "ccNavApp11Title1Nav1";
var uAgent = context.getUserAgent().getUserAgent();
if((uAgent.match("iPhone") !== null || param.platform=="iphone") ||
(uAgent.match("Android") !== null || param.platform=="android") ||
uAgent.match("iPad") !== null){
context.redirectToPage("/mobile.xsp", true);
}else{
context.redirectToPage("/xpApp1.xsp", true);    
}   }]]></xp:this.afterPageLoad>
</xp:view>

我做错了什么?

1 个答案:

答案 0 :(得分:2)

使用JavaScript的数组和对象来定义应用程序结构

sessionScope.apps = 
     [
      { app: "App 1",
        titleBars: [
                    {titleBar: "Title Bar 1",
                     navs: ["Nav 1", "Nav 2", "Nav 3"]
                    },
                    {titleBar: "Title Bar 2",
                     navs: ["Nav 4", "Nav 5", "Nav 6"]
                    }
                   ]
      },
      { app: "App 2",
        titleBars: [
                    {titleBar: "Title Bar 3",
                     navs: ["Nav 31", "Nav 32", "Nav 33"]
                    },
                    {titleBar: "Title Bar 4",
                     navs: ["Nav 41", "Nav 42"]
                    }
                   ]
      }
    ];

您可以使用

访问第一个应用
sessionScope.apps[0].app

第一个应用程序的第一个titleBar with

sessionScope.apps[0].titleBars[0].titleBar

和第一个应用程序的第一个titleBar的第二个导航

sessionScope.apps[0].titleBars[0].navs[1]

使用for循环或forEach获取数组的所有元素。