是否可以使用 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
使用您输入的值。
我有一个包含很多字段的自定义控件,我想在同一个 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
使用您输入的值。