# a4j:support mit 2 selectOneMenus klappt nicht - Validierung



## Mean (26. Dez 2008)

Hallo,

ich hoffe, hier kann mir jemand helfen, da ich schon komplett am Verzweifeln bin. Und zwar würde ich für meine Projektarbeit (fürs Studium) gerne in meinem Webshop zwei selectOneMenus verwenden, bei dem das 2., abhänig vom 1., seine Werte automatisch anpasst.

Ich erhalte jedoch einen Validierungsfehler:



> 01:11:07,405 INFO  [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
> sourceId=newUsedCar:fahrzeugTyp[severity=(ERROR 2), summary=(newUsedCar:fahrzeugTyp: Validierungs-Fehler: Wert nicht gültig.), detail=(newUsedCar:fahrzeugTyp: Validierungs-Fehler: Wert nicht gültig.)]



Was vorab schonmal ganz komisch ist: Auf einer Seite in dem Webshop klappt das ganze. Ich habe den kompletten Text der Seite kopiert, genauso die Entity,... und nur den @Name geändert und in der xhtml-Seite den Entitynamen angepasst. Der einzige Unterschied zwischen den 2 Seiten ist, daß die, auf der es funktioniert, über einen commandButton aufgerufen wird, mit dem ein Fahrzeug-Objekt mitgeschickt wird. Rufe ich diese Seite direkt auf geht es auch nicht mehr...

Hier mal meine xhtml-Seite:


```
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                             "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ui:composition xmlns:a4j="http://richfaces.org/a4j"
				xmlns="http://www.w3.org/1999/xhtml"
                xmlns:s="http://jboss.com/products/seam/taglib"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:rich="http://richfaces.org/rich"
               	xmlns:c="http://java.sun.com/jstl/core"
                template="../layout/template.xhtml">

<ui:define name="body">
						<h:message />
			
										
<h:outputText value="Land:" />

           <a4j:region id="filter">
			<h:panelGroup id="countryOneMenu">
				<h:selectOneMenu value="#{newUsedCarAction.marke}" id="marke">
					<s:selectItems var="marke" value="#{newUsedCarAction.markenSelect()}" label="#{marke.marke}" itemValue="#{marke.marke}" noSelectionLabel="Marke" />
					<a4j:support event="onchange" action="#{newUsedCarAction.changeTyp()}" reRender="statesOneMenu" ajaxSingle="true"/>
				</h:selectOneMenu>
			</h:panelGroup>
			

										
										
			<h:outputText value="Bundesstaat oder was auch immer:" />
			
			<h:panelGroup id="statesOneMenu">
				<h:selectOneMenu value="#{newUsedCarAction.typ}" id="fahrzeugTyp">
					<s:selectItems var="fahrzeugTyp" value="#{newUsedCarAction.getFahrzeugTypen()}" label="#{fahrzeugTyp.fahrzeugTyp}" itemValue="#{fahrzeugTyp.fahrzeugTyp}" noSelectionLabel="FahrzeugTyp" />
					<a4j:support event="onchange"/>
				</h:selectOneMenu>
			</h:panelGroup>
	</a4j:region>						

		</s:validateAll>
	</h:form>
</ui:define>
</ui:composition>
```

Und hier mal die Entity:


```
package de.autohaus;

import static org.jboss.seam.ScopeType.CONVERSATION;

import java.util.Collection;
import java.util.List;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Date;

import javax.ejb.EJB;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import static javax.persistence.PersistenceContextType.EXTENDED;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.log.Log;

import de.autohaus.fahrzeugverwaltung.Fahrzeugverwaltung;
import de.autohaus.fahrzeugverwaltung.db.Fahrzeug;
import de.autohaus.fahrzeugverwaltung.db.FahrzeugTypNotFoundException;
import de.autohaus.fahrzeugverwaltung.db.Marke;
import de.autohaus.fahrzeugverwaltung.db.FahrzeugTyp;
import de.autohaus.bestellverwaltung.Bestellverwaltung;
import de.autohaus.benutzerverwaltung.db.Anrede;
import de.autohaus.benutzerverwaltung.db.Kunde;
import de.autohaus.bestellverwaltung.db.Versandart;

@Stateful
@Scope(CONVERSATION)
@Name("newUsedCarAction")
public class NewUsedCarAction implements NewUsedCar {

	@Logger
	Log log;
	
	@EJB
	private Fahrzeugverwaltung fv;
	@EJB
	private Bestellverwaltung bv;
	
	@PersistenceContext
	private EntityManager em;
   
	@In
	private transient FacesContext facesContext;
	
	@In
	private Kunde kunde;
	
	private ArrayList<Versandart> versandarten;
	private ArrayList<Marke> marken;
	private ArrayList<FahrzeugTyp> typen;
	
	private String versandart;
	private Fahrzeug fahrzeug;
	private String marke;
	private String typ;
	
	private String verify;
	
	public void sellCar() {
		log.info("TYP: " + typ);
		log.info("Marke: " + marke);
	}
	
	public List<Marke> markenSelect() {
		marken = new ArrayList<Marke>(fv.findAllMarken());
		return marken;
	}
	
	public List<FahrzeugTyp> getFahrzeugTypen() {
		if(this.typen == null)
			this.typen = new ArrayList<FahrzeugTyp>();
		log.info("FahrzeugTypen: " + typen);
		return this.typen;
	}
	
	public List<FahrzeugTyp> changeTyp() throws FahrzeugTypNotFoundException {
		typen = new ArrayList<FahrzeugTyp>(fv.findFahrzeugTypenByMarke(this.marke));
		return typen;
	}
	
    public List<Versandart> versandartenSelect() {
    	log.info("BV: " + bv);
    	versandarten = new ArrayList<Versandart>(bv.findAllVersandarten());
    	log.info(versandarten);
    	return versandarten;
    }
	
	public String getTyp() {
		return this.typ;
	}
	
	public void setTyp(String t) {
		this.typ = t;
	}
	
	public String getMarke() {
		return this.marke;
	}
	
	public void setMarke(String m) {
		this.marke = m;
	}
	
	public String getVersandart() {
		return this.versandart;
	}
	
	public void setVersandart(String v) {
		this.versandart = v;
	}

    public Kunde getKunde() {
    	return this.kunde;
    }

    public void setKunde(Kunde k) {
    	this.kunde = k;
    }
    
    public Fahrzeug getFahrzeug() {
    	return this.fahrzeug;
    }
    
    public void setFahrzeug(Fahrzeug f) {
    	this.fahrzeug = f;
    }
   
   public String getVerify()
   {
      return verify;
   }

   public void setVerify(String verify)
   {
      this.verify = verify;
   }
   
   @Remove
   public void destroy() {}
}
```

Bin total am Verzweifeln, da ich jetzt schon 14 Stunden in das Problem ver(sch)wendet habe und einfach keien Lösung im INet finde 

Wäre super, wenn mir da jemand helfen könnte.

Vielen Dank und Grüße,

Dirk


----------



## Halunken-Joe (16. Jan 2009)

```
</s:validateAll>
   </h:form>
```

Wo sind denn die Start Tags?


----------



## Mean (16. Jan 2009)

Hallo halunke 

danke für die Antwort! Habe die Datei zusammenkopiert (da war noch weit mehr drin, was ich der Übersichthalber weggelassen habe). Dem ist dann auch das <form> zum Opfer gefallen. Aber das s:validateAll hatte ich tatsächlich vergessen. Den Fehler habe ich schon vor längerem behoben (nur vergessen hier zu posten).

Danke und Grüße,

Dirk


----------



## internet (28. Jun 2010)

Hallo,
wie wurde denn das Problem nun gelöst?
Stehe genauso vor der gleichen Schwierigkeit...


----------

