是否可以使用 EL 语言在自定义控件中创建动态字段名?

Is it possible to create dynamic fieldnames in custom control using EL language?

我有一个包含很多字段的自定义控件,我想在同一个 Xpage 上多次包含这个自定义控件,但是我需要我添加的每个自定义控件的字段名都不同,因为有很多字段我不想为所有字段创建 属性 定义。

我使用各种字段,包括 RT,所以我想我需要使用 EL 语言完成绑定,

有没有办法使字段名称动态化?这样字段将以我添加到 属性 定义的内容为后缀,即在第一个 cc 中,所有字段将以“_1”为后缀,第二个以“_2”为后缀,依此类推。

下面只是一个自定义控件的例子

<?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core">

        <xp:panel>
            <xp:inputText id="inputText1" value="#{d.Fld1}"></xp:inputText>
            <xp:inputText id="inputText2" value="#{d.Fld2}"></xp:inputText>
            <xp:inputText id="inputText3" value="#{d.Fld3}"></xp:inputText>
        </xp:panel>
    </xp:view>

在首次加载时使用预处理器 ${javascript:...} 替换自定义控件的代码部分。

例如,表达式

value="#{doc.${javascript:'Fld1_' +  compositeData.index}}"

取代
value="#{doc.Fld1_2}"

如果 compositeData.index 是“2”。


这是一个用于测试目的的工作示例:

自定义控件"ccFields":

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:panel>
        <xp:inputText
            id="inputText1"
            value="#{doc.${javascript:'Fld1_' +  compositeData.index}}" />
        <xp:inputText
            id="inputText2"
            value="#{doc.${javascript:'Fld2_' +  compositeData.index}}" />
        <xp:inputRichText
            id="inputRichText1"
            value="#{doc.${javascript:'Fld3_' +  compositeData.index}}" />
    </xp:panel>
</xp:view>

与 属性 定义

主要 XPage:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:this.data>
        <xp:dominoDocument var="doc" formName="Test" />
    </xp:this.data>
    <xc:ccFields index="1" />
    <xc:ccFields index="2" />
    <xp:messages />
    <xp:button
        value="save"
        id="button1">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="complete"
            immediate="false"
            save="true">
        </xp:eventHandler>
    </xp:button>
</xp:view>

当您点击按钮 "save" 时,它会创建一个具有表单 "Test" 的新文档,文本字段

  • Fld1_1
  • Fld1_2
  • Fld2_1
  • Fld2_2

和富文本字段

  • Fld3_1
  • Fld3_2

使用您输入的值。