想想“计算子表单”,但在Xpages中。
在我的一个自定义控件上,根据某个值,我想要呈现一个自定义控件,该控件使用组合框呈现下拉列表或呈现带有提前输入的输入框。
这是一个呈现视图的自定义控件,所有视图配置选项都由文档而不是设计处理,因此几个不同的视图使用相同的自定义控件。
例如:我有一个按状态视图,使用状态为第一列的自定义控件,我们使用组合框允许用户选择要过滤的状态值。另一个视图按申请编号排序,我想使用预先输入而不是组合框。
我的偏好是对两者使用相同的动态视图自定义控件,并且有一个公式来确定要使用的两个(comboBox或inputText)中的哪一个。如何计算要加载的自定义控件?
(动态视图控制的功劳归功于Scott Good的团队解决方案。)
答案 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
的属性也是在页面加载时计算的。