1

如何在 sessionScope 变量的基础上添加自定义控件。我尝试包含页面容器控件但没有运气:

<xp:this.afterPageLoad><![CDATA[#{javascript:sessionScope.put("viewName","ccViewAll.xsp");}]]></xp:this.afterPageLoad>
<xp:text escape="true" id="computedField1">
    <xp:this.value><![CDATA[#{javascript:sessionScope.get("viewName")}]]></xp:this.value>
</xp:text>
<xc:appLayout>
    <xp:this.facets>
        <xp:panel xp:key="facetMiddle">
            <xp:include id="include1">
                <xp:this.pageName><![CDATA[${javascript:sessionScope.get("viewName")}]]>
                </xp:this.pageName>
            </xp:include>
        </xp:panel>
    </xp:this.facets>
</xc:appLayout>

上面的代码给了我错误 Error 404 HTTP Web Server: Item Not Found Exception。但是当我硬编码 ccViewAll.xsp 而不是 sessionScope.get("viewName") 的视图名称时,它工作正常。

-麦

4

3 回答 3

4

如果您有 XPage 的 ExtLib,则可以使用动态内容控件或 switchFacet 控件。Teamroom 模板(ExtLib 附带的演示应用程序)在“allDocuments”Xpage 或“allDocsAllTab”自定义控件中使用这些,这些都是很好的示例。

如果您没有 ExtLib,您可以使用自定义控件的加载/渲染属性来决定加载哪个。

例如

<xp:panel key="MiddleColumn">
   <xc:customControl1 loaded="${javascript: if(viewScope.control == "customControl1")}"></xc:customControl1>
   <xc:customControl2 loaded="${javascript: if(viewScope.control == "customControl2")}"></xc:customControl2>
</xp:panel>

loaded = false 表示不会对此控件执行任何操作。render = false 表示控件将被创建但隐藏,您可以稍后更改它以显示它。

如果它会改变,例如当一个按钮在启动时被点击并加载并且在用户登录时不会改变,则使用渲染。

于 2012-05-30T08:02:15.067 回答
3

如果您使用它根据其他选择在 domino 数据库中显示不同的视图,我建议您查看扩展库的“动态视图面板”控件。

使用此控件意味着您无需为要使用的每个视图创建不同的自定义控件,只需使用此控件的单个页面并将其指向正确的视图以通过范围变量显示。

如果您需要自定义每个视图的显示方式,您可以创建一个 viewControl bean 来根据它所显示的视图设置其他属性。

于 2012-05-30T14:12:52.047 回答
0

值得一提的是,如果您不使用 ExtLib - 如果您使用的是部分刷新,那么您必须使用渲染属性,因为加载的属性只能在 pageLoad 上计算。

据我了解,这意味着每个自定义控件都将由服务器计算,这可能不是您想要的。(一方面增加了开销。)

/J

于 2012-05-31T06:51:57.590 回答