JSF 2.0 h:selectOneMenu mit enums

JanHH

Top Contributor
Hallo,

beim seam 2 gabs das nette s:selectItems mit dem Attribut "noSelectionLabel". Wenn eine Property einer Bean ein Enum ist, die Property allerdings null ist, dann wird dies mit dem als "noSelectionLabel" angegebenen String im Menüfeld angezeigt.

Jetzt hab ich JSF 2.0 und JEE 6 am Wickel, ohne seam 2, ohne s:selectItems, und nun stellt sich die Frage, wie man das dann realisiert. Man kann zwar bei f:selectItems ein "noSelectionValue" angeben, aber dies ist lediglich ein Element aus dem enum-Array, welches standardmässig angezeigt wird. Notfalls könne man einen Text wie "bitte auswählen" als erstes Element mit in das Enum aufnehmen, aber dann funktioniert das automatische Validieren mit @NotNull per beanValidation nicht mehr.

Dann könnte man statt h:selectOneMenu das rich:select von rich faces 4 nehmen, dies stellt, wenn eine enum-Property null ist, tatsächlich ein leeres Feld da. An sich völlig ok, aber für meine Anwendung auch nicht brauchbar, weil das javascript-onchange des Menüs, welches ich brauche, aufgrund irgendeines rf4-Bugs nicht zuverlässig funktioniert.

Also, was tun?

Gruß+Danke
Jan
 

F.S.WhiTeY

Bekanntes Mitglied
Du benutzt SelectItems und bastelst dir die getValues-Methode um:

Java:
<h:selectOneMenu id="name" value="#{enumBean.enums}" >
<f:selectItems value="#{enumBean.values}"/>
</h:selectOneMenu>

Dazu gehört eine getValues(); Methode die in etwa so aussieht:

Java:
public Object[] getValues(){
SelectItem[] items = new SelectItem[enums.values().length];

for ( int i = 0 ; i<items.length; i++){

//Hier null abfangen und nen Blankstring einhängen

items[i] = new SelectItem( enums.values()[i], enums.values()[i].toString().toLowerCase());

}
return items;
}
 
Zuletzt bearbeitet:

JanHH

Top Contributor
Danke.. hat mich auf die richtige Spur gebracht ;-). Offenbar muss man zusätzlich zu den Enums ein weiteres SelectItem mit Wert null erzeugen, dann scheints zu gehen.
 

JimPanse

Bekanntes Mitglied
oder du verwendest einen Converter (noch JSF 1.2 d.h. ValueBinding funzt aber auch mit JSF 2.0):


Java:
public Object getAsObject(FacesContext aFacesContext,
			UIComponent aUIComponent, String aString) throws ConverterException {

		if (aString != null) {
			Class enumType = aUIComponent.getValueBinding("value")
					.getType(aFacesContext);

			return Enum.valueOf(enumType, aString);
		}

		return null;
	}
	public String getAsString(FacesContext aFacesContext,
			UIComponent aUIComponent, Object aObject) throws ConverterException {

		if (aObject == null) {
			return null;
		}
		Enum<?> type = (Enum<?>) aObject;

		return type.name();
	}
 

JanHH

Top Contributor
Danke aber das Problem besteht nicht direkt darin, die Enums zu verwenden, sondern in der Anzeige eines Eintrages für Null-Werte (also nicht ein Element des Enum-Typs, sondern ein Text wie "bitte auswählen" oder so). Da gabs bei Seam 2 halt das schöne "noSelectionLabel" bei s:selectItems, aber das kriegt man ja "per Hand" in den Griff. Ist halt nur etwas mehr Arbeit..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
C selectOneMenu mit valueChangeListener im <p:dialog Web Tier 2
F JSF h:selectOneMenu Wert vorbelegen klappt nicht? Web Tier 2
M Converter für SelectOneMenu Web Tier 3
Phash JSF - SelectOneMenu Property anzeigen Web Tier 3
F JSF p:selectOneMenu Session Web Tier 10
S JSF SelectOneMenu - Probleme mit AJAX Web Tier 6
F PrimeFaces - selectOneMenu Web Tier 2
F PrimeFaces p:selectOneMenu funktioniert nicht Web Tier 12
H JSF Textarea nur einblenden, bei bestimmter Auswahl in SelectOneMenu Web Tier 6
H JSF SelectOneMenu und der Converter Web Tier 3
F JSF ValueChangeListener in editable p:SelectOneMenu Web Tier 3
NoXiD JSF h:selectOneMenu - änderungen nicht übernommen Web Tier 14
P SelectOneMenu liest Daten nicht ein Web Tier 7
J h:selectOneMenu und Page-Refresh Web Tier 3
M selectOneMenu Web Tier 4
I selectOneMenu - Problem Web Tier 6
M SelectoneMenu Default Wert Web Tier 4
ModellbahnerTT JSF selectOneMenu Web Tier 15
J Datenübergabe aus selectOneMenu Web Tier 2
F Unterschied h:selectOneMenu zu rich:comboBox Web Tier 4
E Wert aus JSF-Selectonemenu in Textfeld schreiben Web Tier 4
A JSF SelectOneMenu mit Werten aus Bean vorbelegen Web Tier 2
M SelectOneMenu mit Inhalt aus DB Web Tier 2
I rendered bei Enums JSF Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben