Beste Lösungsmöglichkeit bei einem inputText & Ajax?

thinkpad

Grünschnabel
Hallo Leute,

seit einigen Stunden überlege ich nun wie ich folgendes Problem lösen könnte:

Man hat die Möglichkeit etwas anzulegen und diesem Objekt einen Namen zu vergeben. Sollte dieser Name schon vorhanden sein, so soll ein Popup erscheinen mit einem Hinweis und die Frage ob der Benutzer das alte angelegte Objekt überschreiben will (Namen sind einzigartig).

Ich nutze JSF mit Ajax und Javascript für die aktuelle Lösung. Ist aber meiner Meinung nach sehr wirklich nur ein workaround:

Code:
...
<h:inputText id="save_name_in" value="#{manager.name}" size="20" maxlength="45" >
	<a4j:support ajaxSingle="true" event="onblur" reRender="submit_type" action="#{manager.checkIfNameExists}" />
</h:inputText>
...
<h:commandButton id="save_button1" 
	onclick="if (!confirm('A object with this name already exists. Do you want to overwrite the existing object?')) return false;" 
	rendered="#{manager.alreadyExists}"
	action="#{manager.saveObject}"
	value="Save & Exit" 
	title="Save" />
<h:commandButton id="save_button2" 
	rendered="#{!(manager.alreadyExists)}"
	action="#{manager.save}"
	value="Save & Exit" 
	title="Save" />
...

Das heisst, sobald ein Text eingegeben wurde, wird dieser mit Ajax an die Backing Bean gesendet. Falls der name existiert, wird der erste Button gerendered, ansonsten der Zweite.

Mein Problem ist hier der Javascript-Event. Mit onblur wird der Request zwar sofort nach Verlassen abgeschickt, aber wenn der Benutzer direkt danach auf Save klickt, wird der Request erst abgeschickt nachdem der falsche Button angeklickt wurde. OnChange als Event zeigt keinerlei Verbesserungen.

Kennt jemand eventuell einen sauberen Weg um dieses Problem zu lösen?

Vielen Dank im Voraus
 
Nee haut nicht hin. Habe auch im web gelesen, dass es bei onchange und textinput Probleme bei verschiedenen Browsern gibt.

Habe auch probiert mit Richfaces und a4j:poll zu arbeiten um den Button in Zyklen neu zu rendern. Ist aber auch unzuverlässig. Ich werde glaube ich den ganzen Ajax-Kram rausnehmen und die Überprüfung auf einer neuen Seite machen.
 
Ich mich bez. meiner Diplomarbeit sehr intensiv mit Dojo befasst. Das Toolkit, welches nur im View angesiedelt ist, erlaubt einfache asynchrone kommunikation. Hier funktioniert auch das Event onChange.
Eventuell lohnt es sich kurz dort reinzu-googeln, Aufwand: gering!
 
Du könntest ja eine eigene "onchange" funktion Basteln indem du regelmäßig überprüfst, ob sich der Wert geändert hat im Input Fenster, und wenn ja dann Sendest du einen Http-Request auf gültigkeit des Inhaltes.
man könnte das ja mit setTimeInterval(); machen.
Einfach alle 500ms prüfen ob sich der Inhalt der Entsprechenden Input Felder verändert hat.

mfg
Gene
 
oder du benutzt das event "onkeyup" bzw"onkeydown" oder "onkeypress".

Übrigends das hier das der Forum Bereich für Java nicht für Javascript&Ajax, den findest du weiter oben im Forum.

mfg
Gene
 

Neue Beiträge

Zurück