Je souhaite créer une liste déroulante selectOneMenu afin de pouvoir sélectionner un statut sur ma question. Est-il possible de rendre le f: selectItem plus flexible compte tenu de ce qui se passe si l'ordre des énumérations change, et si la liste était grande? Et pourrais-je faire mieux? Et est-il possible de "sélectionner" automatiquement l'élément de la question?
Classe Enum
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Entité de question
@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>
la source
#{bean.question.status}
a une valeur d'énumération valide. Vous n'avez rien à faire pour vous assurer que laquestion
propriété a le statut approprié prérempli.+= status
, essayez d'utiliser.concat(status)
comme @Ziletka le suggère.Pour la localisation, nous pouvons également utiliser cette solution:
Ainsi, le chemin d'accès aux ressources pour les chaînes de localisation n'est pas codé en dur dans Enum.
la source
<c:set>
ou<ui:param>
ou créer une fonction EL personnalisée.Vous pouvez utiliser
<f:selectItems value="#{carBean.carList}" />
et renvoyer une liste d'SelectItem
instances qui encapsulent l'énumération (à utiliserStatus.values()
pour obtenir toutes les valeurs possibles).la source
Vous pouvez utiliser la fonction suivante de l'utilitaire el pour obtenir les valeurs d'énumération et les utiliser dans un
SelectOneMenu
par exemple. Pas besoin de créer des haricots et des méthodes standard.Enregistrez-le comme fonction el dans un fichier taglib:
Et enfin, appelez-le comme:
Similaire à la réponse BalusC, vous devriez utiliser un ensemble de ressources avec des étiquettes d'énumération localisées et pour un code plus propre, vous pouvez également créer une fonction comme
getEnumLabel(enum)
la source
#{myBundle[enumName.i18nKey]}
puis mettre les clés i18n dans votre énumération en tant que propriétés:BLA_TYPE("SOME_BLA_TYPE_KEY")
byBLA_TYPE
est l'énumération à utiliser etSOME_BLA_TYPE_KEY
est la clé i18n.