Hello All,
Previously i have posted a lot about component that supports multiple selection in ADF Faces (af:selectManyCheckbox, af:selectManyChoice, af:selectManyListbox, af:selectManyShuttle)
- Multiple Selection in ADF Faces
This post is about selecting all values in a component programmatically on a event like button click, value change event etc.
Note that this post is designed for ADF BC (viewObject) based components , to set values in bean based component check this-
Programmatically populate values in ADF Faces multiSelect component (af:selectManyCheckbox, af:selectManyChoice, af:selectManyListbox, af:selectManyShuttle)
So for this i have just dropped Departments viewObject as multiSelect component on page
(af:selectManyCheckbox, af:selectManyChoice, af:selectManyListbox, af:selectManyShuttle)
Now see code of Set all values as selected button-
/**Method to get BindingContainer of current viewPort (page) * @return */ public BindingContainer getBindings() { return BindingContext.getCurrent().getCurrentBindingsEntry(); }
/**Method to set all values as selected in SelectMany Components. * @param actionEvent */ public void setAllValuesToSelected(ActionEvent actionEvent) { int arrIndex[]; //Get the iterator binding of component DCIteratorBinding deptIter = (DCIteratorBinding) getBindings().get("DepartmentsView1Iterator"); //Get viewObject from Iterator ViewObject deptVo = deptIter.getViewObject(); //Get component list binding , component is directly based on this JUCtrlListBinding list = (JUCtrlListBinding) getBindings().get("DepartmentsView1"); DCIteratorBinding iterList = list.getDCIteratorBinding(); RowSetIterator rsi = deptVo.createRowSetIterator(null); int i = 0; int rowCount = (int) deptVo.getEstimatedRowCount(); //Initialize array and set it's size (equal to number of rows in List) arrIndex = new int[rowCount]; while (rsi.hasNext()) { //Get viewObject next row from RowSetIterator Row nextRow = rsi.next(); //Set this row as page iterator's current row iterList.setCurrentRowWithKey(nextRow.getKey().toStringFormat(true)); //Now get index of this row int indx = iterList.getCurrentRowIndexInRange(); //Add it to array arrIndex[i] = indx; i++; } rsi.closeRowSetIterator(); // Set as selected indices list.setSelectedIndices(arrIndex); }
All done, now run and check application , click on button and see what happens ?
Great, it's working :)
I have explained one more approach to set values in multi select component that makes use of component binding
check it - Set values in af:selectManyChoice programmatically - Oracle ADF
Sample ADF Application-Download
Cheers :) Happy Learning