Valor de configuración de error de conversión para 'convertidor nulo': ¿por qué necesito un convertidor en JSF?

Tengo problemas para entender cómo usar la selección en JSF 2 con POJO / entidad de manera efectiva. Por ejemplo, estoy tratando de seleccionar unWarehouse entidad a través del siguiente menú desplegable:

<h:selectOneMenu value="#{bean.selectedWarehouse}">
    <f:selectItem itemLabel="Choose one .." itemValue="#{null}" />
    <f:selectItems value="#{bean.availableWarehouses}" />
</h:selectOneMenu>

Y el siguiente bean gestionado:

@Named
@ViewScoped
public class Bean {

    private Warehouse selectedWarehouse;
    private List<SelectItem> availableWarehouses;

    // ...

    @PostConstruct
    public void init() {
        // ...

        availableWarehouses = new ArrayList<>();

        for (Warehouse warehouse : warehouseService.listAll()) {
            availableWarehouses.add(new SelectItem(warehouse, warehouse.getName()));
        }
    }

    // ...
}

Tenga en cuenta que uso todoWarehouse entidad como el valor deSelectItem.

Cuando envío el formulario, esto falla con el siguiente mensaje de caras:

Error de conversión al establecer el valor 'com.example.Warehouse@cafebabe' para 'Convertidor nulo'.

Esperaba que JSF pudiera establecer la correctaWarehouse objetar a mi bean administrado cuando lo envuelvo en unSelectItem. Envolviendo mi entidad dentro delSelectItem estaba destinado a omitir la creación de unConverter para mi entidad

¿Realmente tengo que usar unConverter cada vez que quiero hacer uso de entidades en mi<h:selectOneMenu>? Para JSF debería ser posible simplemente extraer el elemento seleccionado de la lista de elementos disponibles. Si realmente tengo que usar un convertidor, ¿cuál es la forma práctica de hacerlo? Hasta ahora llegué a esto:

Crear unConverter implementación para la entidad.Anulando elgetAsString(). Creo que no necesito esto ya que la propiedad de etiqueta delSelectItem se usará para mostrar la etiqueta de la opción desplegable.Anulando elgetAsObject(). Creo que esto se usará para devolver el correctoSelectItem o entidad dependiendo del tipo del campo seleccionado definido en el bean administrado.

losgetAsObject() me confunde. ¿Cuál es la forma eficiente de hacer esto? Teniendo el valor de cadena, ¿cómo obtengo el objeto de entidad asociado? ¿Debo consultar el objeto de entidad desde el objeto de servicio basado en el valor de cadena y devolver la entidad? ¿O tal vez de alguna manera puedo acceder a la lista de las entidades que forman los elementos de selección, hacer un bucle para encontrar la entidad correcta y devolver la entidad?

¿Cuál es el enfoque normal de esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta