在XPage上动态包含自定义控件

时间:2012-08-29 05:02:31

标签: custom-controls xpages

我正在尝试根据某些条件在XPage上包含自定义控件。这些条件取决于某些用户选择字段。因此,当用户更改其选择时,我将填充自定义控件名称,并尝试将其包含在XPage中。 我读过,但它在页面加载期间加载了页面,我无法动态加载它。

示例代码段:

<xp:button id="button3" value="Change Page to Include CC 2">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" disableValidators="true" refreshId="pnlRefresh">
        <xp:this.action><![CDATA[#{javascript:sessionScope.ccPageName = "content_CC2"}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>
<xp:panel id="pnlRefresh">
    <xp:include>
        <xp:this.pageName><![CDATA[${javascript:sessionScope.ccPageName + ".xsp";}]]> </xp:this.pageName>
    </xp:include>
</xp:panel>

有没有可能达到这个要求?或者使用JAVA我们如何在XPage代码中动态注入页面?

我不想使用ExtLib的动态内容控制或开关控制,因为我需要包含所有必需的自定义控件(硬编码),然后我才能根据条件显示特定的CC。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

有两种方法可以实现您的目标:

  1. 使用动态内容控件 - 它不是必须包含所有控件以使其工作 - 有一个hack允许您只是重建此控件的内容(使用null参数调用show方法) ),这是一个例子:http://pastebin.com/VEDAjdDJ

  2. 使用自定义控件构建器从java构建控件。可以在Extension Library源代码(类com.ibm.xsp.extlib.builder.ControlBuilder)中找到此示例。这比第一种方式有点难,所以我建议你使用动态内容控制!

  3. 请记住,在重建控件内容后,保存在未保存的控件中的所有数据都将丢失!处理此问题的最佳方法是使用托管bean来保持您的数据远离UI控件。