Ich möchte ein Dropdown-Menü für selectOneMenu erstellen, damit ich einen Status für meine Frage auswählen kann. Ist es möglich, das f: selectItem flexibler zu gestalten, wenn man bedenkt, was passiert, wenn sich die Reihenfolge der Aufzählungen ändert und die Liste groß ist? Und könnte ich das besser machen? Und ist es möglich, das Element der Frage automatisch "auszuwählen"?
Aufzählungsklasse
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Frage Entität
@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>
quelle
#{bean.question.status}
ein gültiger Aufzählungswert vorliegt. Sie müssen nichts tun, um sicherzustellen, dass diequestion
Eigenschaft mit dem richtigen Status vorab ausgefüllt ist.+= status
, versuchen Sie es.concat(status)
wie von @Ziletka vorgeschlagen.Zur Lokalisierung können wir auch diese Lösung verwenden:
Daher ist der Ressourcenpfad für Lokalisierungszeichenfolgen in Enum nicht fest codiert.
quelle
<c:set>
oder<ui:param>
eine benutzerdefinierte EL - Funktion oder Homebrew.Sie können
<f:selectItems value="#{carBean.carList}" />
eine Liste vonSelectItem
Instanzen verwenden und zurückgeben , die die Aufzählung umschließen (verwenden SieStatus.values()
, um alle möglichen Werte abzurufen ).quelle
Sie können die folgende Funktion des Dienstprogramms el verwenden, um die Aufzählungswerte abzurufen und sie beispielsweise in einem
SelectOneMenu
zu verwenden. Keine Notwendigkeit, Bohnen und Boilerplate-Methoden zu erstellen.Registrieren Sie es als el-Funktion in einer Taglib-Datei:
Und nenne es schließlich so:
Ähnlich wie bei BalusC sollten Sie ein Ressourcenpaket mit lokalisierten Enum-Labels verwenden. Für saubereren Code können Sie auch eine Funktion wie erstellen
getEnumLabel(enum)
quelle
#{myBundle[enumName.i18nKey]}
die i18n-Schlüssel als Eigenschaften verwenden und dann in Ihre Aufzählung einfügen können:BLA_TYPE("SOME_BLA_TYPE_KEY")
byBLA_TYPE
ist die zu verwendende Aufzählung undSOME_BLA_TYPE_KEY
der i18n-Schlüssel.