Quiero hacer un menú desplegable selectOneMenu para poder seleccionar un estado en mi pregunta. ¿Es posible hacer que f: selectItem sea más flexible considerando lo que sucede si cambia el orden de las enumeraciones y si la lista es grande? ¿Y podría hacer esto mejor? ¿Y es posible "seleccionar" automáticamente el elemento que tiene la pregunta?
Clase de enumeración
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Entidad de pregunta
@Enumerated(EnumType.STRING)
private Status status;
JSF
<div class="field">
<h:outputLabel for="questionStatus" value="Status" />
<h:selectOneMenu id="questionStatus" value="#{bean.question.status}" >
<f:selectItem itemLabel="Submitted" itemValue="0" />
<f:selectItem itemLabel="Rejected" itemValue="1" />
<f:selectItem itemLabel="Approved" itemValue="2" />
</h:selectOneMenu>
<hr />
</div>
fuente

#{bean.question.status}tenga un valor de enumeración válido. No necesita hacer nada para asegurarse de quequestiontiene la propiedad de estado adecuada precargada.+= status, intente usarlo.concat(status)como sugiere @Ziletka.Para la localización también podemos utilizar esta solución:
Entonces, la ruta de recursos para las cadenas de localización no está codificada en Enum.
fuente
<c:set>o<ui:param>crear una función EL personalizada.Puede usar
<f:selectItems value="#{carBean.carList}" />y devolver una lista deSelectIteminstancias que envuelvan la enumeración (useStatus.values()para obtener todos los valores posibles).fuente
Puede usar la siguiente función de utilidad el para obtener los valores de enumeración y usarlos en,
SelectOneMenupor ejemplo. No es necesario crear frijoles y métodos repetitivos.Regístrelo como una función el en un archivo taglib:
Y finalmente llámalo como:
Similar a la respuesta de BalusC, debería usar un paquete de recursos con etiquetas de enumeración localizadas y para un código más limpio también puede crear una función como
getEnumLabel(enum)fuente
#{myBundle[enumName.i18nKey]}y luego poner las claves i18n en su enumeración como propiedades:BLA_TYPE("SOME_BLA_TYPE_KEY")byBLA_TYPEes la enumeración que se utilizará ySOME_BLA_TYPE_KEYes la clave i18n.