I found this discussion which describes how you can put an input text inside a repeat control and repeat it unlimited number of times and bind it to a field in a document dynamically.
Here's what I did. I created a repeat like this:
<xp:repeat indexVar="fieldSuffix" value="#{viewScope.rowCount}">
<xp:div>
<xc:dynamicInputText dataSource="#{contact}" fieldName="fullName_#{fieldSuffix}" />
</xp:div>
</xp:repeat>
In the custom control dynamicInputText
I have written the input text control like this:
<inputText value="#{compositeData.dataSource[compositeData.fieldName]}" />
Then I created an Add button on which I increment viewScope.rowCount
by 1 and partial refresh the repeat control. This adds a new row of input text. Similarly I created a Delete button on click of which decrement viewScope.rowCount
by 1 and partial refresh the repeat control. This removes the last added input text.
Now if click on Add three times I get three input text fields on web page. I enter information in each of them. Then I click on Delete to remove the third (last) input text. Now when I save the data source all three fields (including the last one I removed) gets saved in the document.
Why does this happen? How can I stop the third field I removed to be saved in the document?