0

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

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

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

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

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

(动态视图控制的功劳归于 Teamworks Solutions 的 Scott Good 人员。)

4

2 回答 2

5

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

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

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

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

于 2013-01-10T23:06:18.250 回答
1

前段时间我在 StackOverflow 上看到了这个问题,其中作者使用包含页面控件 ( ) 来包含使用基于公式的属性的xp:include自定义控件。pageName

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

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

于 2013-01-11T03:57:25.477 回答