In this post I have decided to dive into multi-selection feature offered by ADF Faces little bit more deeper and to show how it could be used in practice. Developed application use case is based on two pages, in first page user can select multiple rows in search results table and press edit button. Second page will be opened only with selected rows. So, this post is focused on how to open in second page only rows selected in first page.
Sample application - TableSelection.zip is based on standard HR schema. Two pages are implemented - search.jspx and edit.jspx. In search.jspx you can find two components - a search form and and a table for search results. In search form is implemented af:selectOneChoice component and table contains read-only af:selectOneChoice for region names. In edit.jspx there is editable table with af:selectOneChoice component for region name.
So, what happens when in search.jspx Edit button is pressed? Edit button is binded with editButton_action() method, available in backing_search backing bean. This means, when Edit button is pressed - editButton_action() is invoked:
This method finds needed iterator and acquires keys for selected rows. And main functionality - method sets where clause for View object that is used in edit.jspx page. Where clause is generated according to primary keys data of selected rows, this allows to open in edit.jspx only needed rows.
Just imagine, that we want to move several countries to other continent - no problem, select those countries and press Edit button:
Edit form is opened, here you can change region name for selected countries, save your changes and return to search form:
And..., you can continue a process... :-)
When running sample application, don't forget to add adf-faces-impl.jar and jsf-impl.jar to application's WEB-INF\lib directory.