I liked your solution because it would allow me to use the manage-properties as managed properties of converters . However dug a little deeper into the UIComponent that is passed to getAsObject and get what I needed HtmlSelectOneMenu -> UISelectItems -> SelectItem -> the object -> the object's name . Attached is the code.
Dennis Byrne
public static String getClassNameByUISelectItems(UISelectItems uISelectItems){ List selectedItemsList ; SelectItem selectItem ; String className = null; selectedItemsList = (List)uISelectItems.getValue(); for(int i = 0 ; i < selectedItemsList.size(); i++){ selectItem = (SelectItem)selectedItemsList.get(i); if(className == null){ className = selectItem.getValue().getClass().getName(); }else{ if(! className.equals(selectItem.getValue().getClass().getName())){ // this means there are SelectItems wrapping more than one type // of object ... the dynamic converter cannot perform magic!! throw new ConverterException(); } } } return className; } public static String getClassNameByUIComponent(UIComponent uIComponent){ Iterator iterator ; Object child ; UISelectItems uISelectItems ; if(uIComponent instanceof HtmlSelectOneMenu){ for(iterator = uIComponent.getChildren().iterator(); iterator.hasNext();){ child = iterator.next(); if(child instanceof UISelectItems){ uISelectItems = (UISelectItems)child; return getClassNameByUISelectItems(uISelectItems); } } } return null; } public Object getAsObject(FacesContext arg0, UIComponent uIComponent, String id) throws ConverterException { String shortName ; String identifier; MappingUtilImpl mappingUtil; String hql ; Object object; String className; className = getClassNameByUIComponent(uIComponent); mappingUtil = (MappingUtilImpl)BackingUtil.getMappingUtil(); shortName = MappingUtilImpl.getClassNameByClassType(className); identifier = mappingUtil.getPkPropertyByClassType(className); hql = "FROM " + shortName + " AS a WHERE a." + identifier + " = '" + id + "'"; try { object = HibernateTool.get(hql); return object; } catch (PersistenceException e) { e.printStackTrace(); throw new ConverterException(); } }=