复合控件中的 Xpages 和计算字段

Xpages and computed field in a composite control

我已经能够使用此处描述的技术成功创建动态字段名称并保存输入字段的值:http://lpar.ath0.com/2014/04/07/repeated-xpages-input-controls-with-number-indexed-field-names/

我还有一个计算字段,它有一个数字索引名称,但其值是根据关键字选择计算的。我可以像这样为其分配动态字段名称:

<xp:text escape="true" id="computedField1">
    <xp:this.value><![CDATA[#{compositeData.dataSource[compositeData.fieldName2]}]]></xp:this.value>
</xp:text>

此字段的 属性 定义如下所示:

并且对复合控件的调用如下所示:

<xc:cc_dynamicAssetItems 
row="#{(rownum lt 10)? '0':''}#{rownum}"
dataSource="#{document1}"
fieldName1="replace#{(rownum lt 10)? '0':''}#{rownum}"
fieldName2="budget#{(rownum lt 10)? '0':''}#{rownum}" >
</xc:cc_dynamicAssetItems>

但是我不知道如何将值传递给这个计算字段。它的 SSJS 应该是:

var projectNumber = getComponent("ProjectNumber").getValue();
if(projectNumber == ""){
return "Nothing found";
}else{
return projectNumber + "A";
}

我希望得到指导。

谢谢,

您不应设置组件的值,而应设置基础数据源的值。这意味着您的逻辑不应该 运行 在您的计算字段中,而不是在 ProjectNumber 组件的 onChange 事件中。 然后你必须更新例如仅 document1.budget01,速度快很多。

作为替代方案,您仍然可以将方法绑定*传递给您的自定义控件,如下所述:Pass javascript code to Custom Control

(*: 在你的例子中是一个值绑定)

你试过javascript而不是表达语言

例如: fieldName1="#{javascript: 'replace'+(rownum > 10? '0':'')+rownum}"