Xpages Xpage:通过会话变量以编程方式设置自定义控件?

Xpages Xpage:通过会话变量以编程方式设置自定义控件?,xpages,Xpages,我开始了解Xpages的动态特性,并试图使我的编码更加精简 我在xpages中使用switchfacetc来控制加载哪个自定义控件,具体取决于sessionScope变量中的值 为了简单起见,我让cc的名称与sessionScope变量匹配。因此,我最终得到了以下代码 <?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlnsstrong te

我开始了解Xpages的动态特性,并试图使我的编码更加精简

我在xpages中使用switchfacetc来控制加载哪个自定义控件,具体取决于sessionScope变量中的值

为了简单起见,我让cc的名称与sessionScope变量匹配。因此,我最终得到了以下代码

 <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlnsstrong text:xc="http://www.ibm.com/xsp/custom"
        xmlns:xe="http://www.ibm.com/xsp/coreex">
        <xc:ccAppLayout>
            <xp:this.facets>
                <xc:ccAppNav xp:key="LeftColumn" />
                <xe:switchFacet id="switchFacet1" xp:key="facet_1"
                    selectedFacet="#{javascript:return sessionScope.pageSelected}">
                    <xp:this.facets>
                        <xc:cpApp2Title1Page1 xp:key="cpApp2Title1Page1" />
                        <xc:cpApp2Title2Page1 xp:key="cpApp2Title2Page1" />
                        <xc:cpApp2Title2Page2 xp:key="cpApp2Title2Page2" />
                        <xc:cpApp2Title3Page1 xp:key="cpApp2Title3Page1" />
                    </xp:this.facets>
                </xe:switchFacet>
            </xp:this.facets>
        </xc:ccAppLayout>
    </xp:view>

不错,但在我看来,如果我可以直接将cc设置为sessionScope变量,事情会变得更干净。这样,这个Xpage的代码就不必在不同的Xpage之间更改。我只需要一张X照片就行了

有没有办法做到这一点,甚至是一个好主意

布莱恩

=============================================== 我要找的是这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlnsstrong text:xc="http://www.ibm.com/xsp/custom"
        xmlns:xe="http://www.ibm.com/xsp/coreex">     
        <xc:ccAppLayout>
            <xp:this.facets>
                <xc:ccAppNav xp:key="LeftColumn" />        
                    <xc:#{javascript:return sessionScope.pageSelected} xp:key="facet_1"></xc:#{javascript:return sessionScope.pageSelected}>
            </xp:this.facets>
        </xc:ccAppLayout>
    </xp:view>

============================================================== 克努特

这是一个很好的建议,但正如您所指出的,它只在页面创建时加载

是否有一种不同的方法来完成我想要的任务,或者只是更容易让代码保持原来的状态

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xc:ccAppLayout>
        <xp:this.facets>
            <xc:ccAppNav xp:key="LeftColumn" />
            <xp:include id="include1" xp:key="facet_1">
                <xp:this.pageName><![CDATA[${javascript:sessionScope.pageSelected + ".xsp"}]]></xp:this.pageName>
            </xp:include></xp:this.facets>
    </xc:ccAppLayout>
</xp:view>


您可以使用
您可以使用
您可以创建一个自定义控件来管理所有控件吗?将所需CC的名称作为自定义属性的CC,然后仅呈现所需的CC。因此,将switchFacet放入一个新的自定义控件中,例如ccAll.xsp:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
   xmlns:xc="http://www.ibm.com/xsp/custom"
   xmlns:xe="http://www.ibm.com/xsp/coreex">
   <xe:switchFacet id="switchFacet1" selectedFacet="#{javascript:return compositeData.ccName}">
        <xp:this.facets>
            <xc:cc1 xp:key="cc1" />
            <xc:cc2 xp:key="cc2" />
            <xc:cc3 xp:key="cc3" />
        </xp:this.facets>
    </xe:switchFacet>
</xp:view>

您能创建一个自定义控件来管理所有控件吗?将所需CC的名称作为自定义属性的CC,然后仅呈现所需的CC。因此,将switchFacet放入一个新的自定义控件中,例如ccAll.xsp:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
   xmlns:xc="http://www.ibm.com/xsp/custom"
   xmlns:xe="http://www.ibm.com/xsp/coreex">
   <xe:switchFacet id="switchFacet1" selectedFacet="#{javascript:return compositeData.ccName}">
        <xp:this.facets>
            <xc:cc1 xp:key="cc1" />
            <xc:cc2 xp:key="cc2" />
            <xc:cc3 xp:key="cc3" />
        </xp:this.facets>
    </xe:switchFacet>
</xp:view>

不久前,我创建了一个组件来动态切换自定义控件。代码可在github上获得:


组件可以随时插入自定义组件:在部分刷新期间或根据变量。

不久前,我创建了一个组件来动态切换自定义控件。代码可在github上获得:
<xc:ccAll ccName="#{javascript:return sessionScope.pageSelected}"></xc:ccAll>


组件可以随时插入自定义组件:在部分刷新期间或根据变量。

您始终可以创建自定义控件的属性,这就是您要问的吗?您始终可以创建自定义控件的属性,这就是你要问的吗?如果只计算一次,是否可以用$而不是a编码?如果只计算一次,是否可以用$而不是a编码?
<xc:ccAll ccName="#{javascript:return sessionScope.pageSelected}"></xc:ccAll>