我正在尝试根据某些条件在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。
请帮帮我。
答案 0 :(得分:1)
有两种方法可以实现您的目标:
使用动态内容控件 - 它不是必须包含所有控件以使其工作 - 有一个hack允许您只是重建此控件的内容(使用null参数调用show方法) ),这是一个例子:http://pastebin.com/VEDAjdDJ
使用自定义控件构建器从java构建控件。可以在Extension Library源代码(类com.ibm.xsp.extlib.builder.ControlBuilder)中找到此示例。这比第一种方式有点难,所以我建议你使用动态内容控制!
请记住,在重建控件内容后,保存在未保存的控件中的所有数据都将丢失!处理此问题的最佳方法是使用托管bean来保持您的数据远离UI控件。