Chcę utworzyć listę rozwijaną selectOneMenu, aby móc wybrać stan mojego pytania. Czy można uelastycznić f: selectItem, biorąc pod uwagę, co się stanie, jeśli zmieni się kolejność wyliczeń i jeśli lista będzie duża? Czy mógłbym zrobić to lepiej? Czy jest możliwe automatyczne „wybranie” pozycji, której dotyczy pytanie?
Klasa wyliczenia
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Podmiot pytania
@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>
źródło
#{bean.question.status}
ma prawidłową wartość wyliczenia. Nie musisz nic robić, oczekując upewnienia się, żequestion
właściwość statusu została wstępnie wypełniona.+= status
, spróbuj użyć tego,.concat(status)
co sugeruje @Ziletka.Do lokalizacji możemy wykorzystać również to rozwiązanie:
Tak więc ścieżka zasobów dla ciągów lokalizacji nie jest zakodowana na stałe w Enum.
źródło
<c:set>
lub<ui:param>
czy homebrew niestandardową funkcję EL.Możesz użyć
<f:selectItems value="#{carBean.carList}" />
i zwrócić listęSelectItem
instancji, które zawijają wyliczenie (użyj,Status.values()
aby uzyskać wszystkie możliwe wartości).źródło
Możesz użyć następującej funkcji narzędzia el, aby uzyskać wartości wyliczenia i użyć ich
SelectOneMenu
na przykład. Nie ma potrzeby tworzenia fasoli i metod standardowych.Zarejestruj ją jako funkcję el w pliku taglib:
I na koniec nazwij to tak:
Podobnie jak odpowiedź BalusC, powinieneś używać pakietu zasobów ze zlokalizowanymi etykietami wyliczeń, a dla bardziej przejrzystego kodu możesz również utworzyć funkcję taką jak
getEnumLabel(enum)
źródło
#{myBundle[enumName.i18nKey]}
a następnie umieścić klucze i18n w swoim wyliczeniu jako właściwości:BLA_TYPE("SOME_BLA_TYPE_KEY")
byBLA_TYPE
jest wyliczeniem, które ma być użyte iSOME_BLA_TYPE_KEY
jest kluczem i18n.