Xpages 动态数据绑定?

Xpages 动态数据绑定?,xpages,Xpages,我的Notes文档上有几个字段 菲尔达1 费尔达2 菲尔达3 菲尔达4 野战1 野战2 野战3 现场总线4 在复合控件上,我有两个编辑框 菲尔德 字段B 我定义了一个compositeData.ATM_NUM自定义控件,它是一个下拉列表,值为1,2,3,4 如何使用可用的复合数据将控件上的编辑框绑定到相应的文档字段 例如,我想做如下事情: “FieldA_”+compositeData.ATM_NUM 我在此线程中尝试了javascript解决方案: 但它似乎不起作用。尝试以下值作为字段A的值

我的Notes文档上有几个字段

菲尔达1 费尔达2 菲尔达3 菲尔达4

野战1 野战2 野战3 现场总线4

在复合控件上,我有两个编辑框 菲尔德 字段B

我定义了一个compositeData.ATM_NUM自定义控件,它是一个下拉列表,值为1,2,3,4

如何使用可用的复合数据将控件上的编辑框绑定到相应的文档字段

例如,我想做如下事情: “FieldA_”+compositeData.ATM_NUM

我在此线程中尝试了javascript解决方案:


但它似乎不起作用。

尝试以下值作为字段A的值:

<xp:inputText value="#{document['FieldA'+compositeData.ATM_NUM]}" />

还可以扩展自定义控件的属性以包含整个字段名(从而将例如“FieldA_1”转移到自定义控件)。然后,您应该能够执行以下操作:

<xp:inputText value="#{document[compositeData.fieldName]}" />

问题与compositeData准备好供您使用的时间有关。在开始时,当自定义控件准备就绪时,它的计算结果为“0”

试试这个:

<xp:inputText id="inputText1" 
           value="${javascript:'#{document1.SomeField'+compositeData.SomeParam+'}'}">
</xp:inputText>


在那里使用“$”符号很重要。它将根据SomeParam创建到SomeField1、SomeField2等的绑定。

自定义控件的数据绑定示例如下:

创建一个自定义控件,添加两个自定义属性:BindTo(字符串)、canEdit(布尔值)。通常情况下,您需要根据业务逻辑的状态设置一个只读字段,而不是其他字段处于编辑模式

 <xp:listBox id="listBox1"
        rendered="#{compositeData.canEdit}">
        <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value>
        <xp:selectItem itemLabel="red"></xp:selectItem>
        <xp:selectItem itemLabel="blue"></xp:selectItem>
        <xp:selectItem itemLabel="green"></xp:selectItem>
 </xp:listBox>
 <xp:text id="textForListbox"
        rendered="#{!compositeData.canEdit}">
        <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value>
 </xp:text>


这种方法的优点(使用
${javascript:“#{”+compositeData.BindTo+“}”}
)是,您可以将该控件绑定到任何东西:文档、范围变量、bean等。

您可能还想检查一下Per建议的技术解释:我尝试了value=“#{document1[cmbuexistermid+compositeData.atmnum]}”但我犯了个错误。我打算尝试野外训练,但如果可以的话,我宁愿避免。我想知道如何只使用我的复合“number”字段。还尝试了value=“#{document1['CMBUExistTermID'+'4']}”,这会在尝试将字符串“CMBUExistTermID”转换为类型“java.lang.Double”时出错,但value=“#{document1['CMBUExistTermID4']}”工作正常。ATM NUM是一个数字吗?然后您可能需要转换为字符串:value=“#{document1[CMBUExistTermID+compositeData.ATM_NUM.toString()]”读/写绑定必须是纯EL,它的语法限制性比SSJS强得多。如果将字段包装在面板中,则可以定义dataContext,将其值设置为要计算字段名的任何表达式,然后将其var传递给字段绑定中的数据源。或者,您可以将其包装在接受字段名作为参数的自定义控件中,然后在字段绑定中引用compositeData。没有错误或任何东西没有按预期填充字段。这是我使用的实际公式。value=“${javascript:'#{document1.CMBUAction'+compositeData.ATM_NUM+'}”>好的,document1在哪里定义?在CC里还是在XPage里?我说得太快了。它工作得很好。美元的用途是什么?是否在任何地方记录了这些内容?$表示内部脚本将在加载阶段计算一次。如果不使用$,返回语句将不会被计算为EL。我已经将其用于动态字段。在我的例子中,一个重复控件正在为一个动态问卷创建类似Field1、Field2的绑定,其中预配置了问题的数量。干杯。我第一次看到如何对文档以外的内容进行动态绑定。非常有用