将自定义控件中的编辑框以编程方式绑定到表单域

时间:2012-01-24 19:02:17

标签: xpages

我有一个包含一系列字段的备注表单,例如city_1,city_2,city_3等。

我有一个XPage,在XPage上我有一个重复。

重复基于具有十个值1 - 10

的数组
var repArray = new Array() ;
for (var i=1;i<=10;i++) {
repArray.push(i) ;
}

return(repArray);

在重复内容中,我有一个自定义控件,用于显示字段city_1到city_10

repeat有一个传入的自定义属性docdatasource 它还有一个名为cityFieldName的字符串自定义属性,它使用repeat计算 集合名称,以便在第一个重复行中为city_1,在第二个行中为city_2等。

自定义控件上的可编辑文本字段使用EL公式绑定     compositeData.docdatasource [compositeData.cityFieldName]

这很好但每次我添加新字段时都要记住创建一个新的自定义属性,然后在父页面上引用它。

我希望能够简单地计算数据绑定,例如

compositeData.docdatasource['city_' + indexvar]

其中indexvar是表示当前行号的变量。

这可能吗?我读过你不能在表达式语言中使用'+'。

3 个答案:

答案 0 :(得分:2)

首先:您不需要计数器的数组。只需要10个(数字) - 重复10次。但是你可以构建一个数组数组:

var repArray = [];
for (var i=1;i<=10;i++) {
   repArray.push(["city","street","zip","country","planet"]) ;
}
return repArray;

然后你应该可以使用

#{datasource.indexvar[0]}

绑定城市,

#{datasource.indexvar[1]}

绑定街道。等

稍微冒一些搞乱阵列序列的危险,如果这是一个问题,你需要在这里深入挖掘使用对象。

答案 1 :(得分:1)

计算到javascript并使用类似

的内容
var viewnam = "#{" +  (compositeData.searchVar )+ "}"
return viewnam

确保这是在自定义控件

中的页面加载时计算的

答案 2 :(得分:0)

我从来没有能够在EL中进行添加,但我只是简单地计算自定义控件之外的字段名称,然后将这些值传递给自定义控件。

如果您希望通过我提供的演示文稿,我可以向您发送一些有效的代码。