code: @Override
  	public List<?> getValue() {
  		// Convert data to a list (if necessary)
  		List<?> data = convertDataToList(getData());
  
  		// Validate the selected options (allow handle invalid options)
  		List<?> validOptions = findValidOptions(getOptions(), data, true);
  
  		if (validOptions == null || validOptions.isEmpty()) {
  			return NO_SELECTION;
  		}
  		return validOptions;
  	}
docs: Returns a {@link List} of the selected options. If no options have been selected, then it returns an empty list.
  <p>
  As getValue calls {@link #getData()} for the currently selected options, it usually expects getData to return
  null (for no selection) or a {@link List} of selected options. If the data returned by getData is not null and is
  not a List, then setData will either (1) if the data is an array, convert the array to a List or (2) create a
  List and add the data as the selected option.
  </p>
  <p>
  getValue will verify the selected option/s are valid. If a selected option does not exist, then it will throw an
  {@link IllegalArgumentException}.
  </p>
  
  @return the selected options in the given UI context.