# JSF ValueChangeListener?



## JimPanse (5. Okt 2007)

Mahlzeit, 
ich hab Problem an dem ich nun schon zwei Tage hänge. Ich will über nen selectOneRadio inputText Felder fühlen. Mit nen outputText geht das wunderbar aber nicht mit den inputTextFeldern??? Hat jemand ne Idee...

```
<h:panelGrid columns ="2">
	<h:outputLabel for="Termintyp" value="Termintyp"/>
	<h:selectOneMenu id="Termintyp" value="#{baseAction.selectTerminArt}" 
		            valueChangeListener="#{baseAction.terminArtValueChange}" 
		           onchange="this.form.submit()"
		immediate="true"
	        styleClass="portlet-form-selectOneMenu">
    <f:selectItems value="#{baseAction.terminArten}"/>
</h:selectOneMenu>
</h:panelGrid columns ="2">

<h:inputText id="termin" value="#{baseAction.termine[baseAction.selectTerminArt}"/>
<h:outputText id="termin" value ="#{baseAction.termine[baseAction.selectTerminArt}"/>
```


Ausschnitt aus der Klasse

```
public void terminArtValueChange(ValueChangeEvent arg0) throws AbortProcessingException {
		// TODO Auto-generated method stub
		String newValue = (String) arg0.getNewValue();
		setSelectTerminArt(newValue);
		initTermine();
		FacesContext.getCurrentInstance().renderResponse();
}
```


Das outputText feld zeigt die Änderung an aber nicht das inputText Feld??? 

Verdammte JSF scheiße.

Danke im vorraus[/quote]


----------



## zordan (8. Okt 2007)

Hi

Ich habe das ganze in einem Projekt realisiert und da funktioniert es einwandfrei.
Den refresh mache ich zwar per AJAX4JSF, aber über ein submit() sollte es auch funktionieren.

Hier mal der Code aus der JSF Seite und der Bean:


```
<h:selectOneMenu id="form_investmentitemtyplist" value="#{bean.typ}"
								valueChangeListener="#{bean.onChangeTyp}"
								styleClass="#{bean.styleClassMandatory}"
								rendered="#{bean.renderFields}">
								<f:selectItems value="#{bean.typs}" />
								<a4j:support event="onchange"
									reRender="form_verantwortlicher" />
							</h:selectOneMenu>

<h:inputText id="form_verantwortlicher" value="#{bean.verantwortlicher}"
readonly="true" styleClass="inactive" size="19" rendered="#{bean.renderFields}" />
```


```
public void onChangeTyp(ValueChangeEvent valueChangeEvent) {
        typ = valueChangeEvent.getNewValue().toString();

        if (typ.equals("xxx")) {
            verantwortlicher = "xxx";
        } else if (typ.equals("yyy")) {
            verantwortlicher = "yyy";
        } else {
            verantwortlicher = "zzz";
        }
    }
```

Getter und Setter habe ich mal weg gelassen und den Code etwas kürzer gehalten als in Wirklichkeit.


----------



## JimPanse (9. Okt 2007)

Mahlzeit,


ja danke für die Hilfe, bloß durch das Tag readonly="true" werden die InputText - wie Outputext Felder behandelt und werden mit der Änderung gerendert, bloß jetzt kann auch keiner mehr was zuätzlich eintragen...

Haste ne Idee wie man das umgehen kann irgendwie ala Javasript onclick wird das readonly Tag im inputText Feld wieder auf false gesetzt????


Danke und Gruß


----------



## zordan (10. Okt 2007)

Habe nochmal in einem weiteren Projekt nachgeforscht, da habe ich eine Master-Detail Übersicht auf einer Seite.
Dort fülle ich die InputText Felder über eine Action und nicht über einen ValueChangeListener, aber das funktioniert tadelos.

Was du noch versuchen kannst, wäre das ganze über ein Binding zu machen und im ValueChangeListener dann die Werte der Komponente zu editieren.
Habe mit Bindings noch nicht wirklich gearbeitet, aber vielleicht führt das zum Ziel.

Gruß Tim


----------

