你能计算出使用哪种自定义控件吗?

时间:2013-01-10 22:00:06

标签: xpages lotus-notes

想想“计算子表单”,但在Xpages中。

在我的一个自定义控件上,根据某个值,我想要呈现一个自定义控件,该控件使用组合框呈现下拉列表或呈现带有提前输入的输入框。

这是一个呈现视图的自定义控件,所有视图配置选项都由文档而不是设计处理,因此几个不同的视图使用相同的自定义控件。

例如:我有一个按状态视图,使用状态为第一列的自定义控件,我们使用组合框允许用户选择要过滤的状态值。另一个视图按申请编号排序,我想使用预先输入而不是组合框。

我的偏好是对两者使用相同的动态视图自定义控件,并且有一个公式来确定要使用的两个(comboBox或inputText)中的哪一个。如何计算要加载的自定义控件?

(动态视图控制的功劳归功于Scott Good的团队解决方案。)

2 个答案:

答案 0 :(得分:5)

在它的生命周期中,XPage存在于两个地方。首先,XPage的相关组件的表示存储在服务器上。然后页面将经历生命周期,从文档中检索属性,检查应呈现的组件,检索任何重复控件(如视图面板等)的数据,并将相关的HTML传递给浏览器。浏览器是它存在的第二个位置。

因此,您无法计算自定义控件。您所能做的就是设置已加载的属性,并且加载需要基于非动态计算,例如viewScope变量,当前XPage名称,存储在XPage上的视图名称等。您将遇到的困难将是使用基于该行条目的数据的不同自定义控件。

另一个选项是扩展库中的动态内容控件或切换控件。两者都类似于使用加载的属性,因为您要在页面上放置两个自定义控件并选择要显示的内容。

根据您的描述,加载的属性应该涵盖您需要的内容。

答案 1 :(得分:1)

有些时候我看到了this question on StackOverflow,其中作者使用了包含网页控件(xp:include)来根据公式使用pageName属性包含自定义控件。

<xp:include>
     <xp:this.pageName><![CDATA[${javascript:sessionScope.ccPageName + ".xsp";}]]> </xp:this.pageName>
</xp:include>

类似于Paul Withers在他的回答中描述的技术,pageName的属性也是在页面加载时计算的。