a4j support und h:inputText

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
Hallo,

ich habe ein modalPanel mit ajax4JSF, welches folgendes Panelgrid beinhaltet:
Code:
							<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

Aktives Mitglied
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

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

KS

Aktives Mitglied
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:

Code:
<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

Aktives Mitglied
...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
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben