jsf SelectOneMenu: Bean als SelectItem Value

Status
Nicht offen für weitere Antworten.

puddah

Aktives Mitglied
Hallo,

ich habe ein Problem mit der JSF Komponente SelectOneMenu. Ich möchte, dass die Werte meiner SelectItems durch Beans dargestellt werden. Ich habe gelesen, dass man sich dafür einen eigenen Konverter schreiben muss, was ich getan habe. Hier erst einmal die Bean die ich benutze:
Code:
public class Employee implements Serializable{

	private int id;

	private String name;
	
	private String forename;
	
	public Employee(){
		super();
	}
	
	public Employee(String name, String forename) {
		super();
		this.forename = forename;
		this.name = name;
	}	

	public String getForename() {
		return forename;
	}

	public void setForename(String forename) {
		this.forename = forename;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}
	
	public String toString(){
		return id + "," +name + "," + forename;
	}

	public void setId(int id) {
		this.id = id;
	}
}

Der Konverter für die Bean:
Code:
public class EmployeeConverter implements Converter {

	public Object getAsObject(FacesContext ctx, UIComponent uiComponent, String value) {
		Employee emp = new Employee();
		emp.setId(Integer.valueOf(getProperty(value, "id")));
		emp.setForename(getProperty(value, "forename"));
		emp.setName(getProperty(value, "surname"));
		System.out.println("Converter-> Employee: " + emp);
		System.out.println("Converter-> value: " + value);
		return emp;
	}
	
	private String getProperty(String source, String propName){
		int idIndex = source.indexOf(propName + "=") + propName.length()+1;
		int commaIndex = source.indexOf(",",idIndex);
		if(commaIndex < 0) commaIndex = source.indexOf("]");
		System.out.println(idIndex);
		System.out.println(commaIndex);
		return source.substring(idIndex, commaIndex);
	}
	

	public String getAsString(FacesContext ctx, UIComponent uiComponent, Object value) {
		if(!(value instanceof Employee)) throw new ConverterException();
		Employee emp = (Employee)value;
		StringBuffer stringValue = new StringBuffer("[id=");
		stringValue.append(emp.getId());
		stringValue.append(",forename=");
		stringValue.append(emp.getForename());
		stringValue.append(",surname=");
		stringValue.append(emp.getName());
		stringValue.append("]");
		return stringValue.toString();
	}

}
Die Methode, in der ich mir die SelectItems zusammen baue:
Code:
	public Collection<SelectItem> getPmList() {
		Collection<SelectItem> selectItems = new Vector<SelectItem>();
		Collection<Employee> emps = controler.getEmployeeService()
				.getEmployees();
		Iterator<Employee> iter = emps.iterator();
		while (iter.hasNext()) {
			Employee emp = iter.next();
			selectItems.add(new SelectItem(emp, emp.getName() + ", "
					+ emp.getForename()));
		}
		return selectItems;
	}
Und zu guter letzt der Teil der JSF mit dem SelectOneMenu:

Code:
<h:selectOneMenu id="pm" value="#{ProjectEditBean.project.projectManager}">
					<f:selectItems value="#{ProjectEditBean.pmList}" />
</h:selectOneMenu>
Auf der selben Seite habe ich noch ein h:message Feld, das mir bei jedem Submit folgende Fehlermeldung ausgibt:
Validierungs-Fehler: Wert nicht gültig
Hat jemand eine Ahnung woran das liegt? hab ich irgendetwas vergessen oder falsch gemacht?
Ich hab mir schon jede Menge Turoials im Netz angesehen, da wird aber meist nur die Verwendung von SelectOneMenus mit primitiven Datentypen beschrieben, nicht aber die Verwendung mit Beans.
 

HLX

Top Contributor
puddah hat gesagt.:
Und zu guter letzt der Teil der JSF mit dem SelectOneMenu:

Code:
<h:selectOneMenu id="pm" value="#{ProjectEditBean.project.projectManager}">
					<f:selectItems value="#{ProjectEditBean.pmList}" />
</h:selectOneMenu>

...und zu allerletzt: wie wird #{ProjectEditBean.project.projectManager} gesetzt? Hier sollte eines deiner SelectItems also ein Employee drin stehen.
 

puddah

Aktives Mitglied
Muss das ein Objekt vom Typ SelectItem mit einer Employee Bean sein, oder direkt eine Employee Bean?
 

puddah

Aktives Mitglied
Genau, das habe ich auch gemacht. Also kann es daran nicht liegen. Hmm... Kann es sein dass mit dem Converter etwas nicht stimmt?
 

HLX

Top Contributor
Ich denke nicht. Habe allerdings für SelectItems noch nie einen Konverter verwendet. Kommt der überhaupt irgendwo zum Einsatz? Wo wird der Konverter angesprochen?

Du solltest es mal mit Strings versuchen. Erzeuge die SelectItems statt mit Employee-Objekten mit dessen id als String:

Code:
...
selectItems.add(new SelectItem(String.valueOf(emp.getId()), emp.getName() + ", " 
               + emp.getForename())); 
...

Dann liefere aus der Bean den Wert, der unter "value" des SelectOneMenus stehen ebenfalls als String. Setze dabei den Wert auf eine beliebige vorhandene Id.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JSF selectOneMenu keine Auswahl Allgemeines EE 8
W PrimeFaces SelectOneMenu Cursortasten Allgemeines EE 3
T Anfängerfrage: h:selectOneMenu (JSF 2.0), @ManyToOne Annotation in Entity (JPA 2.0) Allgemeines EE 2
S JSF: selectOneMenu: bei onchange actionListener auslösen Allgemeines EE 5
B JSF - selectOneMenu mit Daten aus faces-config füllen Allgemeines EE 5
N selectOneMenu - items über ajax Allgemeines EE 3
M SelectOneMenu (ComboBox) in JSF Allgemeines EE 3
R JSF Entitybean direkt in Sessionscoped Bean referenzieren Allgemeines EE 2
I Session löschen in Bean (Session Beans) Allgemeines EE 1
J Hello World mit Stateless Session Bean - Was mache ich falsch? Allgemeines EE 2
J Unterschied zwischen HttpSession und Stateful Session Bean Allgemeines EE 3
R Wie eine stateful session bean erneut "aufgreifen" Allgemeines EE 22
B [EJB] javax.inject.DefinitionException: bean not a Java type Allgemeines EE 5
T Einstieg in J2EE: Remote auf Bean zugreifen Allgemeines EE 11
H Bean läuft unter GlassFish, aber JBoss nicht Allgemeines EE 5
P Unterschied Session Scope / Stateful Session Bean Allgemeines EE 6
A Im PhaseListener auf Stateful Session Bean zugreifen Allgemeines EE 6
J geschützter Bean zugriff mit einem Rich-Client Allgemeines EE 2
2 JSTL Tags für eine Bean? Allgemeines EE 4
M Spring: Bean als Webservice freigeben Allgemeines EE 9
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
V JSP BEAN Speichern von einer Zahl nach eingabe Allgemeines EE 2
H Bean Vergleich.gibts da schon was Feines? Allgemeines EE 13
B unterschied servlet und bean Allgemeines EE 2
F response.sendError() von Bean aus Allgemeines EE 6
A Session Bean mit Local-Interface nutzen Allgemeines EE 3
J prozesse aus der application-bean threadfähig? Allgemeines EE 4
G JSF dynamsiche style zuweisung aus Backing Bean Allgemeines EE 3
G Objekt von jsp an set Methode von Bean übergeben! Allgemeines EE 2
N Lokation von Bean Klassen? Allgemeines EE 5
M JSF Bean-Property mit Parameter aufrufen Allgemeines EE 12
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
R Zugriff auf Managed Bean aus einem Filter Allgemeines EE 2
boxi JSF von einem Bean auf ein anderes Bean zugreifen Allgemeines EE 3
J Bean in der init-Methode des Servlets instanzieren Allgemeines EE 9
Y JSF - einzelne Bean zerstören/ungültig machen Allgemeines EE 2
S In einer Bean-Methode an ndere Beans kommen Allgemeines EE 7
ichbindiegute Performance von Entity Bean create vs. JDBC insert Allgemeines EE 11
RaoulDuke EJB 3.0 - Exceptions aus Methoden einer Session Bean Allgemeines EE 2
A Selbstreferenzierter Entity-Bean Allgemeines EE 3
V Bean-Daten in JSF-JSP finden Allgemeines EE 3
G Entity Bean ignoriert Datenbank Allgemeines EE 16
J In einem Bean zugriff auf ein SessionBean? Allgemeines EE 2
F Session Bean -> Daten aus dem Servlet holen Allgemeines EE 11
F Package beim Cookie-setzten über BEAN nicht gefunden Allgemeines EE 4
M STRUTS/Cannot retrieve definition for form bean null on acti Allgemeines EE 4
E Methoden einer Bean aufrufen? Allgemeines EE 4
P Struts Form Bean vs. Session Variable Allgemeines EE 6
G Exception creating bean of class . (Struts) Allgemeines EE 8
T statische Methoden versus Application-Bean Allgemeines EE 2
N Duplicate Bean Name (Tomcate 5.X, JDK 1.5) Allgemeines EE 2
M Unterschied zwischen Servlet und Bean/EJB Allgemeines EE 2
flashfactor Logging in einem Session-Bean Allgemeines EE 2
N Einbindung einer Bean in eine JSP (Tomcat-Server 5.5.x) Allgemeines EE 2
H Sichtbarkeit von Bean-Modifikationen? Allgemeines EE 2
H JSP, Session und Java-Bean Allgemeines EE 4
R html-form mit bean:write Allgemeines EE 10
R Use bean in scriptlet in struts Allgemeines EE 4
N Deployen einer EJB3.0 Bean Allgemeines EE 4
M Session Bean vers. Entity Bean Allgemeines EE 3
U Enterprise Bean mit dynamischer Datenbankauswahl? Allgemeines EE 3
T Filesystemzugriff von einer Bean? Allgemeines EE 6
C Mail von einer Session Bean aus senden Allgemeines EE 2
C Message Driven Bean soll keine Nachrichten empfangen Allgemeines EE 4
A Begriffe MBean JMX-Bean? Allgemeines EE 2
K JAVA BEAN DB Connection Prob Allgemeines EE 5
B Kein definiertes Bean? --- JDeveloper Allgemeines EE 5
C JSP mit java Bean Allgemeines EE 22
T Bean übertragen von Servlet zu Servlet Allgemeines EE 9
T Variablen von Bean über Servlet setzen Allgemeines EE 5
S XML parsen in Bean Allgemeines EE 2
G Instanzvariablen mit Strings in Bean vergleichen... Allgemeines EE 3
S Struts: Problem mit <bean:message> - Tag Allgemeines EE 1
A Kommunikation zwischen Java Servlet und Bean Allgemeines EE 1

Ähnliche Java Themen

Neue Themen


Oben