balusc offers the definitive answer on how to use JSF converters and why conversion is necessary here but my question is why bother? An extra class dedicated to conversion seems like bloat to me. Why not simply have the backing bean's setSelectedXXX() methods accept a String rather than an object and do the conversion there rather than in Converter.getAsObject()? In fact it seems clearer to me to name the backing bean's setSelectedXXX() methods like setSelectedXXXByName() or setSelectedXXXById().
My concrete problem is that my backing bean contains the list of selectItems that I need to iterate over to find the needed one by name or ID, not the Converter class. Of course the converter can call backingBean.getXXX() to get this list, but having the logic outside the backing bean seems splintered to me. Is there a good reason for it that I am missing?