The problem is with the test page/app itself. It just wasn't visible before, because before this fix there was no script to expand the active index dynamically, but all the hidden input fields, holding the active index for each accordion, were being updated. There was just no visible clue that there was something wrong with the app. Another way to see it, is to replace the accordion component on the test page (accordionRepeatDataTbl.xhtml) for an ace:tabSet, as in the following markup:
<ace:tabSet id="accordion" clientSide="false" selectedIndex="#{accordion.activeIndex}">
<ace:tabPane id="cPane" label="Calgary">
<h:outputText id="outputTxt1" value="Calgary content"/>
</ace:tabPane>
<ace:tabPane id="vPane" label="Vancouver">
<h:outputText id="outputTxt2" value="Vancouver content"/>
</ace:tabPane>
<ace:tabPane id="tPane" label="Toronto">
<h:outputText id="outputTxt3" value="Toronto content"/>
</ace:tabPane>
<ace:ajax event="serverSideTabChange" />
</ace:tabSet>
The issue with the test page is also visible when using an ace:tabSet. The problem is that the activeIndex/selectedIndex is being bound to the 'accordion' variable, which is the variable declared in the outer h:dataTable, and not the variable declared in the inner ui:repeat. There's not even a variable declared in ui:repeat. So, all accordions inside ui:repeat are bound to the same outer variable, so when an active index is modified, all accordions bound to that property also have to update their active indexes. Also, the data collection is exactly the same for the h:dataTable and for the ui:repeat (accordionRepeatDataTblBean.accordions), which doesn't make much sense to me, but I'm not sure what was the original purpose of this test page. What I'm used to see with nested iterative containers is that there's a data object for for the outer container and a different data object for the inner container, each with their own variables. A similar test in the ace:tabSet test app follows this pattern. Please review this test page/app and make the necessary changes for it to work normally.
r4260: committed fix to allow updating the active index programmatically.
Since the hidden input that contains the active index has its own client id, it was being updated by itself without reinitializing the component. However, a dynamic script was added to only set the new tab index in the jQuery widget, in order to avoid re-creating the entire component.