# Problem mit t:selectOneRadio und ValueChangeListener



## ~Steve~ (12. Okt 2007)

Hallo, 

zunächst mal der relevante Code, dann zu meinem Problem



```
jsp Seite


<h:form>   
        
                
         <t:dataTable  
         	id="customerdata" 
         	value="#{CustomerBean.data}" 
         	var="data"  
			binding="#{CustomerAction.table}" 	
         >           
            
            <t:column>
        	   <f:facet name="header"><h:outputText value="Bezeichung"/></f:facet>
        	     <h:outputText value="#{data.description}"/>      	 
        	</t:column>  
        	      	
        	<t:column>
        	   <f:facet name="header"><h:outputText value="Anzahl"/></f:facet>
        	     <h:outputText value="#{data.anz}"/>      	 
        	</t:column>
        	
        	<t:column>
        	   <f:facet name="header"><h:outputText value="Auswählen"/></f:facet>        	     
        	     <t:selectOneRadio       	      	  	         
        	          id="rowSelected"     	         
        	          value="#{data.objId}" 
        	          forceId="true"        	          
        	          forceIdIndex="false"        	          
        	          valueChangeListener="#{CustomerAction.valueChanged}"    	          
        	          >
        	                   	 	
		            <f:selectItem itemValue="" />  

        	     </t:selectOneRadio>        	           	 
        	</t:column>      	           
                
      </t:dataTable>   
        		        
      <h:commandLink id="updateData"  action="#{CustomerAction.updateData}" value="Speichern"/>
          
     		      
      </h:form>    
      
 /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/    
      Java Klassen:
      
      Auszug CustomerAction

        //action Methode
              
        public void updateData() {
    
    		//Daten updaten beim Click auf Speichern, Funktion wird gar nicht aufgerufen :-( 
            System.out.println("action aufgerufen");
        }
        
        
        //valuechangelistener
        
         public void valueChanged(ValueChangeEvent e) {
    
               //Beim Click auf Speichern soll über den selektierten Radiobutton das aktuell ausgewählte Objekt ermittelt werden
               System.out.println("ausgewähltes Objekt: "+e.getNewValue().toString() );
         }       

/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/
```


Es geht darum, dass ich eine <t:dataTable> habe, die ich Datenobjekten fülle. Nun soll aus dieser Tabelle genau 1 Datenobjekt ausgewählt werden. Hierzu wird in jedem radiobutton die id des entsrpechenden objekts gespeichert. durch das <t:selectoneradio> in zusammenhang mit den attributen funktioniert das auch ganz gut. nun habe ich das problem, dass ich es nicht hinbekomme, bei einem submit richtig an den selektierten datensatz ranzukommen. 

Zum einen wird die Methode im Link "updateData" gar nicht aufgerufen zum anderen gibt es Problem mit diesem valuechanged Event. Dieses wird nur aufgerufen wenn kein Radiobutton ausgewählt ist und dann "Speichern" 
geklickt wird (in der valueChanged Methode werden einfach alle Objekte in der Tabelle ausgegeben).


Ich kriegs einfach nicht richtig hin, habe es auch schon nach diesem Schema hier probiert

http://forum.java.sun.com/thread.jspa?threadID=789149&messageID=4487022

Wie mache ich das richtig, dass das selektierte Objekt nach dem Click auf Speichern verfügbar ist und in der Klasse CustomerAction dann verarbeitet werden kann ?

Ein einfache Hilfe in der Form eines Konsolenprints (Speichern aufgerufen: auswähltes Objekt bzw Id: .....)
würde mir schon helfen 





Danke schonmal!


----------



## zordan (12. Okt 2007)

Hi

Kannst du nicht in der updateData Methode über

```
FacesContext context = FacesContext.getCurrentInstance();
UIComponent component = context.getViewRoot().findComponent("rowSelected");
```
dir die Komponente holen und dann per

```
component.getValue();
```
den Value, also in deinem Fall die objID holen und dann damit weiter arbeiten?

Gruß Tim


----------



## ~Steve~ (12. Okt 2007)

Hallo, vielen dank für die Antwort
probier ich gleich mal aus. 

jedenfalls bin ich nun mal auf die idee gekommen, mal alle valdierungsfehler ausgeben zu lassen, was mich immerhin einen kleinen schritt weitergebracht hat. demnach kriege ich folgendes ergebnis, für den fall dass ich 

a) kein radio auswähle:

   Exception setting property objId of base with class de.proj.businesslogic.dto.CustomerDataDto, Bean:    de.proj.businesslogic.dto.CustomerDataDto, property: objId, newValue: null

  usw..
  wird für jede Zeile ausgegeben

b) 1 radio selektiere:

   für jede zeile wird ausgegeben

Konvertierungsfehler "_idJsp28": Der eingegebene Wert ist keine gültige Zahl.
Konvertierungsfehler "_idJsp28": Der eingegebene Wert ist keine gültige Zahl.
Konvertierungsfehler "_idJsp28": Der eingegebene Wert ist keine gültige Zahl.
Konvertierungsfehler "_idJsp28": Der eingegebene Wert ist keine gültige Zahl.
Konvertierungsfehler "_idJsp28": Der eingegebene Wert ist keine gültige Zahl.
Konvertierungsfehler "_idJsp28": Der eingegebene Wert ist keine gültige Zahl.




Hmpf


----------

