Requirement- functionality to open/close all
Implementation- Use forEach instead of iterator so that you can access children from panelGroupLayout parent component.
Here is the sample code:
<af:commandButton id="cbShow" text="Show All" icon="/gfx/icons/show.gif" action="#{toggleShowDetails.showAll}" styleClass="info showHide" iconPosition="trailing" partialSubmit="true"/>
<af:panelGroupLayout binding="#{toggleShowDetails.pglDetails}">
<af:forEach items="#{pageFlowScope.informationList}" var="blok" varStatus="status">
<af:showDetail id="sdInfo" disclosedText="Disclosed" undisclosedText="Undisclosed" partialTriggers="cbShow">
<af:outputText value="Some value"/>
</af:showDetail>
</af:forEach>
</af:panelGroupLayout>
public String showAll() {
for(UIComponent child : pglDetails.getChildren()){
if(child instanceof RichShowDetail){
RichShowDetail showDetail = (RichShowDetail)child;
showDetail.setDisclosed(true);
}
DisclosureEvent event = new DisclosureEvent(showDetail, false);
event.queue();
}
return null;
}
af:iterator is a component by ADF whereas af:forEach is an ADF extension to the JSTL tag c:forEach.
af:iterator doesn’t create multiple copies of each sub component, hence you can’t access all dynamically generated instances for modifying from bean and should not use af:iterator
Happy Learning wit Vinay Kumar