# a4j support und h:inputText



## freez (27. Apr 2008)

Hallo,

ich habe ein modalPanel mit ajax4JSF, welches folgendes Panelgrid beinhaltet:

```
<h:panelGrid columns="3">
								... some more
								<h:outputText>Bezeichnung</h:outputText>
							
								<a4j:outputPanel ajaxRendered="true">
									<h:inputText id="EditBezeichnung" value="#{settings.settingsTermine.selektierterTermin.bezeichnung}">
										<f:validateLength maximum="250"></f:validateLength>
										<a4j:support event="onkeyup" reRender="messageEditBezeichnung" for="EditBezeichnung" />
									</h:inputText>
								</a4j:outputPanel>
								
								<rich:message id="messageEditBezeichnung" for="EditBezeichnung">
									<f:facet name="passedMarker">
										<h:graphicImage  value="/images/no_error.gif" /> 
									</f:facet>
									<f:facet name="errorMarker">
										<h:graphicImage value="/images/error.gif" />
									</f:facet>
								</rich:message>
							</h:panelGrid>
```

Das Problem an der Sache ist, daß mit jedem Buchstaben, den ich in "<h:inputText id="EditBezeichnung"" eingebe der Cursor aus dem Feld springt. Ich möchte schon, dass die Message ajax-mäßig gerendert wird, aber der Cursor darf nicht wegspringen. Was läuft verkehrt?


----------



## KS (7. Mai 2008)

hallo

du machst mit a4j:support jedesmal, wenn jemand die taste loslässt einen request und respond an den server..

ist das den nötig? immer wenn der respond zurückkehrt verliert dein browser den focus weil er alle elemente ersetzt..


----------



## freez (7. Mai 2008)

Naja, ich möchte ja auch, dass der Server bei jedem Tastendruck validiert. Oder ist das illusorisch das so zu machen?


----------



## KS (8. Mai 2008)

also mein freund 

üblicherweise (aber was heisst den dass schon) ist es so, dass die vaildierung nach abschluss der eingabe passiert.. in gewissen fällen ist dies natürlich anderst gewünscht. Also fertig mit pipapo.. was du brauchst ist folgendes:


```
<h:panelGrid columns="3">
                        ... some more
                        <h:outputText>Bezeichnung</h:outputText>
                     
                        <a4j:outputPanel ajaxRendered="true">
                           <h:inputText id="EditBezeichnung" value="#{settings.settingsTermine.selektierterTermin.bezeichnung}">
                              <f:validateLength maximum="250"></f:validateLength>
                              <a4j:support event="onkeyup" reRender="messageEditBezeichnung" for="EditBezeichnung" 

oncomplete="windows.document.getElementById['EditBezeichnung'].focus()"

/>
                           </h:inputText>
                        </a4j:outputPanel>
                        
                        <rich:message id="messageEditBezeichnung" for="EditBezeichnung">
                           <f:facet name="passedMarker">
                              <h:graphicImage  value="/images/no_error.gif" />
                           </f:facet>
                           <f:facet name="errorMarker">
                              <h:graphicImage value="/images/error.gif" />
                           </f:facet>
                        </rich:message>
                     </h:panelGrid>
```

so. alles was ich gemacht habe, ist ein oncomplete dem support tag hinzugefügt, welches dafür sorgt, dass jeweils am ende eines respondes der focus wieder ins feld gesetzt wird. Ich bin mir jedoch nicht sicher, ob js das nun ans ende des gerade getippten feldes stellt oder an den anfang.. dies müsstest du dann per javascript speziell behandeln, sollte jedoch kein problem sein.

peace
ks


----------



## KS (8. Mai 2008)

...mhh da fällt mir ein, noch einfacher wäre, wenn du dem support tag das attribut limitToList="true" hinzufügst.. Dies würde bedeuten, dass jeweils NUR das feld messageEditBezeichnung neu gezeichnet würde und alle anderen Elemente (sammt focus) verbeiben wie sie sind...

probier diese möglichkeiten mal aus. 

grüss dich


----------



## freez (8. Mai 2008)

ich prüf das mal ... danke


----------

