Xpageに値の配列を含む複数値フィールドがあります。同じXpageでコントロールを繰り返すと、配列内の値ごとにテキストフィールドが作成されます。
テキストフィールドは独自のカスタムコントロール(「namesField」と呼ばれます)にあり、次のようになります。
<xp:inputText
value="#{compositeData.dataSource[compositeData.fieldName]}"
style="width:300px">
</xp:inputText>
カスタムコントロールには、「dataSource」と「fieldName」(両方の文字列)の2つのカスタムプロパティがあります。
Xpageで、「namesField」カスタムコントロールを次のように繰り返しコントロール内に配置しました(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>
これは絶対にうまくいきます!配列の値ごとに入力フィールドが作成され、各テキストフィールドの値がバックエンドドキュメントに正常に保存されます。たとえば、配列に4つの値が含まれている場合、4つのテキストフィールドを取得します。これはまさに私が望むものですが、テキストフィールドにユーザー名を保存し、各フィールドの名前ピッカーを使用して入力する必要があります。
熱意を持って解雇された私は、「namesField」カスタムコントロールに名前ピッカーを追加しました。障害は、名前ピッカーをそれにバインドできるように、inputTextフィールドにIDを追加することです。「namesField」カスタムコントロールでIDを計算しようとしましたが、これは許可されていないようです(テキストフィールドにid = "#{compositeData.fieldName}"を入力すると、「プロパティIDの値はランタイムバインディング」)。
私は、テキストフィールドのIDを計算するためのさまざまな方法を試しました。私が試した最新のものはこれです
<xe:namePicker id="approverPicker"
dialogTitle="Select an approver" for="${javascript:'#{javascript:reqDoc[\'ApproverName_\' + stageIndex.toString()]}'}">
.........
.........
</xe:namePicker>
これは動作しません!
それで、私がnamePickerにどのフィールドに関連付けられているかを伝える方法を誰かが知っていますか?