If you need to implement select one choice based on alternative data sources (not based on ADF BC) - you shouldn't use af:forEach inside af:selectOneChoice component. Don't get confused with af:forEach tag, this tag is supposed to generate multiple components and not to iterate over a collection of objects and render HTML for each item. There could be cases, when choice list data will come duplicated, with af:forEach tag applied. I would suggest to construct array of SelectItem objects and return it to the f:selectItems tag to be rendered.
This is how proper af:selectOneChoice definition should look like. Array of items is being rendered in the choice list through f:selectItems tag:
Value property for f:selectItems can be entered manually or through the wizard, when creating af:selectOneChoice - this should point to the custom method, where array of SelectItem objects is constructed:
Custom method could read data from any source and construct array of SelectItem objects. This is the input for f:selectItems tag, it knows how to render a list of choice list items out of it:
This is how it looks on runtime - choice list is working fine, no need to use af:forEach:
Download sample application - CustomSelectListApp.zip.
This is how proper af:selectOneChoice definition should look like. Array of items is being rendered in the choice list through f:selectItems tag:
Value property for f:selectItems can be entered manually or through the wizard, when creating af:selectOneChoice - this should point to the custom method, where array of SelectItem objects is constructed:
Custom method could read data from any source and construct array of SelectItem objects. This is the input for f:selectItems tag, it knows how to render a list of choice list items out of it:
This is how it looks on runtime - choice list is working fine, no need to use af:forEach:
Download sample application - CustomSelectListApp.zip.