我有一个包含Xpage上的值数组的多值字段。对同一Xpage的重复控制会为数组中的每个值创建一个文本字段。
文本字段位于自己的自定义控件中(名为" namesField"),如下所示:
<xp:inputText
value="#{compositeData.dataSource[compositeData.fieldName]}"
style="width:300px">
</xp:inputText>
自定义控件有两个自定义属性:&#34; dataSource&#34;和&#34; fieldName&#34; (两个字符串)。
在Xpage上我放了&#34; namesField&#34;像这样的重复控件内的自定义控件(reqDoc.RoutingStages是来自多值字段的值数组):
<xp:repeat
value="#{reqDoc.RoutingStages}" var="stage"
indexVar="stageIndex" id="ApproversRepeat">
<tr>
<td>
<!-- field label -->
<xp:text escape="true"
id="ApprovalStage"
value="#{reqDoc.RoutingStages[stageIndex]}">
</xp:text>
</td>
<td>
<xc:namesField dataSource="#{reqDoc}"
fieldName="ApproverName_#{stageIndex}">
</xc:namesField>
</td>
</tr>
</xp:repeat>
这非常棒!为数组中的每个值创建一个输入字段,并将每个文本字段中的值成功保存到后端doc。例如,如果数组包含4个值,则会得到四个文本字段。这正是我想要的,但是我想在文本字段中存储用户名,我希望它们使用每个字段的名称选择器输入。
充满热情,我在名字领域添加了一个名字选择器&#34;自定义控件。绊脚石是在inputText字段中添加一个id,以便名称选择器可以绑定到它。我已经尝试在&#34; namesField&#34;中计算id。自定义控件,但显然这是不允许的(如果我在文本字段中输入id =&#34;#{compositeData.fieldName}&#34;它会导致错误&#34;属性id的值不能是运行时间约束&#34;)。
我尝试了很多不同的方法来尝试计算文本字段的ID。我尝试过的最新事情就是这个
<xe:namePicker id="approverPicker"
dialogTitle="Select an approver" for="${javascript:'#{javascript:reqDoc[\'ApproverName_\' + stageIndex.toString()]}'}">
.........
.........
</xe:namePicker>
这不起作用!
那么,有没有人知道我如何告诉namePicker它与哪个字段相关联?
答案 0 :(得分:2)
名称选择器是在自定义控件namesField
之外还是之内?因为如果它在自定义控件中,那么您只需要为输入文本设置id
。就像输入文本字段是<xp:inputText id="inputText4" .....></xp:inputText>
一样,名称选择器可以是<xe:namePicker id="namePicker1" for="inputText4" .....></xe:namePicker>
。