2012-08-29 28 views
2

我想基于某些条件在XPage上包含自定义控件。这些条件取决于某些用户选择字段。所以当用户更改他的选择时,我正在填充自定义控件名称,并尝试将其包含在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

如果你注意到'xp:include'组件的代码,你会在'pageName'的公式前面看到**'$'**。这表明此公式将在页面加载时进行评估。在XPage中没有任何选项可以根据需要动态评估此公式。你可以看看[Keith Strickland的博客,他在那里解释了组件注入](http://xprentice.gbs.com/A55BAC/keithstric.nsf/d6plinks/KSTD-8MGJTA)。可能这会给你一些想法。 – Naveen

+0

为什么你不想使用动态内容控制?为什么你需要包含所有必需的自定义控件?如果您仍然包含所需的自定义控件,则可以使用局部刷新来渲染它们。 –

+0

其实,我不想使用动态内容控件。我想根据用户选择加载自定义控件。所以需求如下:当页面最初加载时,页面上没有加载自定义控件,用户点击一些参数,然后加载相应的自定义控件。 –

回答

1

有两种方法可以实现你想要什么:

  1. 使用动态内容控制 - 它不是真的,你必须包括所有的控制,以使其发挥作用 - 有一个hack允许你简单地重建此控件的内容(调用show参数的空方法),这里是一个示例:http://pastebin.com/VEDAjdDJ

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

请记住,重建控件的内容后,保存在未保存的控件中的所有数据将会丢失!处理这个问题的最好方法是使用托管bean来让数据远离UI控件。

相关问题