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 quequestion
tiene 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 deSelectItem
instancias 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,
SelectOneMenu
por 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_TYPE
es la enumeración que se utilizará ySOME_BLA_TYPE_KEY
es la clave i18n.