Desejo criar uma lista suspensa selectOneMenu para poder selecionar um status para minha pergunta. É possível tornar o f: selectItem mais flexível, considerando o que acontece se a ordem dos enums muda e se a lista é grande? E eu poderia fazer isso melhor? E é possível "selecionar" automaticamente o item que a pergunta possui?
Classe Enum
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Entidade de pergunta
@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>
fonte
#{bean.question.status}
tiver um valor enum válido. Você não precisa fazer nada além de garantir que oquestion
tenha a propriedade de status adequada pré-preenchida.+= status
, tente usar.concat(status)
como @Ziletka sugere.Para localização, podemos usar também esta solução:
Portanto, o caminho do recurso para strings de localização não é codificado no Enum.
fonte
<c:set>
ou fazer<ui:param>
um homebrew de uma função EL personalizada.Você pode usar
<f:selectItems value="#{carBean.carList}" />
e retornar uma lista deSelectItem
instâncias que envolvem o enum (useStatus.values()
para obter todos os valores possíveis).fonte
Você pode usar o seguinte utilitário el função para obter os valores enum e usá-los em um,
SelectOneMenu
por exemplo. Não há necessidade de criar beans e métodos clichê.Registre-o como uma função el em um arquivo taglib:
E, finalmente, chame-o assim:
Semelhante à resposta BalusC, você deve usar um pacote de recursos com rótulos enum localizados e para um código mais limpo, você também pode criar uma função como
getEnumLabel(enum)
fonte
#{myBundle[enumName.i18nKey]}
e, em seguida, colocar as chaves i18n em sua enumeração como propriedades:BLA_TYPE("SOME_BLA_TYPE_KEY")
byBLA_TYPE
é o enum a ser usado eSOME_BLA_TYPE_KEY
é a chave i18n.