MultiSelectChoice: How to get underlying values selected

Posted by Vijay Mohan on Oracle Blogs See other posts from Oracle Blogs or by Vijay Mohan
Published on Thu, 03 Jun 2010 18:48:35 +0000 Indexed on 2010/06/03 19:15 UTC
Read the original article Hit count: 246

Filed under:
Let's say you include a multiselectchoice component in your jspx/jsff page, which has <f;selectItem> or <af:forEach> binded to a VO iterator to populate the multiselectchoice and the value property of which is binded to a List attribute binding.

When the user selects some items in that choice List then u want the actual values to be posted.You can check the valuepassthrough flag to true , but many a times it doesn't help and you end up getting the indexes of multiselect values.

Here is a way to get the actual values..

Lets say in the bean u have a utility method to achieve this as follows..

You can associate a valueChangeListener for the multiselectchoice as follows..

public void onValueChangeOfLOV(ValueChangeEvent valueChangeEvent) {
//get array of indexes of selected items in master list
List valueIndexes = (List)valueChangeEvent.getNewValue();
String concatCodes =
returnSelectmanyChoiceValues(valueIndexes,"YourIterator",
"YourAttribute");
}

public String returnSelectmanyChoiceValues(List valueIndexes,String
iterName, String idAttrName){
DCBindingContainer dc =
(DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
DCIteratorBinding iter = dc.findIteratorBinding(iterName);
ViewObject vo = iter.getViewObject();

String codes = "";

for(Object index : valueIndexes){
String iIndex = (String)index;
Row row = vo.getRowAtRangeIndex(Integer.parseInt(iIndex));
codes = codes +(String)row.getAttribute(idAttrName)+",";
}
//remove last ","
if(codes.endsWith(","))
codes = codes.substring(0,codes.lastIndexOf(","));
return codes;
}

This will return u a comma separated values of the selected items. if you want then
You can store it in a List.

© Oracle Blogs or respective owner