jsf jsf-2 primefaces selectonemenu selectmanymenu

jsf - ¿Cómo UISelectOne y UISelectMany componentes preseleccionan los valores predeterminados en f: selectItems



jsf-2 primefaces (1)

Utiliza Object#equals() para eso. Puede cambiar (corregir) este comportamiento al implementarlo en consecuencia en su entidad.

private Long id; @Override public boolean equals(Object other) { return (other != null && getClass() == other.getClass() && id != null) ? id.equals(getClass().cast(other).id) : (other == this); }

No olvides el hashCode() para satisfacer el hashCode() .

@Override public int hashCode() { return (id != null) ? (getClass().hashCode() + id.hashCode()) : super.hashCode(); }

Si no puede cambiar la entidad existente por alguna razón poco clara, envuélvala en su propio DTO.

El convertidor solo convierte entre la entidad y su representación de String única para su uso en la salida HTML y los parámetros de solicitud HTTP y, por lo tanto, no tiene influencia en la preselección. Solo tiene influencia en el posible error de validación: el valor no es un problema válido .

Ver también:

Sé cómo preseleccionar <p:selectOneMenu> , en el value seleccionado debe ser uno de los objetos de <f:selectItems> , pero ¿cómo funciona este componente debajo del capó y puedo cambiar este comportamiento?

En mi caso, tengo un objeto duplicado, en realidad se trata de dos objetos con los mismos valores pero creados dos veces y el objeto seleccionado en <p:selectOneMenu> difiere del objeto de <f:selectItems> y no lo reconoce. Lo más probable es que cambie mi diseño para que apunte al mismo objeto, pero en caso de que no pueda hacerlo debido a un código heredado, etc., ¿cómo puedo cambiar el comportamiento de <p:selectOneMenu> que compare los objetos por id ¿por ejemplo?

Pensé que ese converter responsable, pero cuando se getAsObject no entra en el método getAsString solo getAsString , así que supongo que hay algo diferente, pero ¿qué?

Gracias