Xpages 在Xpage上动态添加自定义控件

Xpages 在Xpage上动态添加自定义控件,xpages,Xpages,如何在sessionScope变量的基础上添加自定义控件。我尝试包含页面容器控件,但运气不佳: <xp:this.afterPageLoad><![CDATA[#{javascript:sessionScope.put("viewName","ccViewAll.xsp");}]]></xp:this.afterPageLoad> <xp:text escape="true" id="computedField1"> <xp:this

如何在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>

上面的代码给出了错误404 HTTP Web服务器:未找到项异常。但是当我硬编码viewname时,它是ccViewAll.xsp,而不是sessionScope.get(“viewname”),工作正常


-MAK

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

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

e、 g


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


如果要更改,请使用rendered。例如,当按钮在启动时被单击并加载,并且在用户登录时不会更改。如果您有XPages的ExtLib,则可以使用dynamic content控件或SwitchFace控件。Teamroom模板(ExtLib附带的演示应用程序)在“allDocuments”Xpage或“allDocsAllTab”自定义控件中使用这些,这些都是很好的示例

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

e、 g


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


如果要更改,请使用rendered。例如,当按钮在启动时被单击并加载,并且在用户登录时不会更改。如果您使用它在domino数据库中显示基于其他选择的不同视图,我建议您查看扩展库的“动态视图”面板控制

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


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

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

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


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

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

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


/J

值得一提的是,如果不使用ExtLib-如果使用部分刷新,则必须使用rendered属性,因为loaded属性只能在pageLoad上计算

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


/J

如何调试viewScope变量?当我在computed字段中输入时,它显示该变量的值,但当我在rendered中比较它时,它总是返回false!!!![代码]/code]。我认为如果(viewScope.get(“viewName”)==“ccViewAll.xsp”)在服务器端脚本中使用“print”(“viewScope:+viewScope.control”);“这将向服务器控制台打印一行,与java中的system.out.println的想法相同,可以根据需要添加任意多的行来查找问题。仅供参考,您可以使用浏览器控制台和“console.log”(“Test:+Test”);“关于javascript,需要注意的一点是#{javascript:}和${javascript:}之间的区别。”表示每次刷新控件/页面时都会运行,$表示只在页面加载时执行。如果在页面顶部创建viewscope,则渲染属性可能在创建之前运行。将渲染更改为#{javascript:}@ashfakhatri有一个很好的名为dBar的OpenNTF项目。Xpages调试器。使调试作用域变量更容易。如何调试viewScope变量?当我在computed字段中输入时,它显示该变量的值,但当我在rendered中比较它时,它总是返回false!!!![代码]/code]。我认为如果(viewScope.get(“viewName”)==“ccViewAll.xsp”)在服务器端脚本中使用“print”(“viewScope:+viewScope.control”);“这将向服务器控制台打印一行,与java中的system.out.println的想法相同,可以根据需要添加任意多的行来查找问题。仅供参考,您可以使用浏览器控制台和“console.log”(“Test:+Test”);“关于javascript,需要注意的一点是#{javascript:}和${javascript:}之间的区别。”表示每次刷新控件/页面时都会运行,$表示只在页面加载时执行。如果在页面顶部创建viewscope,则渲染属性可能在创建之前运行。将渲染结果更改为#{javascr
<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>