# Schnelle Eingabe bei Webanwendung



## miketech (1. Aug 2007)

Hi zusammen,

ich möchte eine Webanwendung auf Basis von JSF schreiben, die aber eine ähnlich schnelle Benutzerinteraktion ermöglicht, wie z.B. eine Swing-Anwendung.

Konkret: Ich habe ein Webformular (Mit Grafiken, Links etc.) und einem Eingabefeld. Hier sollen Zahlen eingegeben werden und diese  Zahlen müssen in eine Datenbank geschrieben werden. Die Eingabe der Zahlen soll schnell erfolgen können. Der Benutzer soll also in der Lage sein "2<Enter>", "5<Enter>", "6<Enter>" etc. innerhalb von z.B. einer Sekunde eingeben können, ohne dass eine dieser Zahlen nicht gespeichert werden. Eine Swing-Anwendung reagiert natürlich schnell genug. 

Bei einer Webanwendung habe ich nun das Problem, dass ich im Normfall einen Reload der Seite habe. Das dauert eindeutig zu lange, zumindest bei meinen Tests mit Tomcat und JSF auf meiner Kiste. Das Laden der Seite ist nicht langsam, aber auch nicht schnell genug 

Ich suche daher nach einer Alternative. Zwei Möglichkeiten fallen mir hierzu ein: 


Einmal in einem versteckten Frame ein Servlet aufrufen, welches die Daten speichert.
Alternativ das ganze asynchron mit AJAX losschicken. Vielleicht geht das mit ajax4jsf ja recht einfach.

Hat vielleicht jemand noch eine andere Idee oder kann mir Tipps geben, wie ich das Problem lösen sollte? 

Kann ich denn irgendwie dem Benutzer garantieren, ob der Eintrag erfolgreich gespeichert worden ist? Vielleicht lässt sich das ja auch irgendwie mit AJAX lösen, dass in der Callback-Methode im Falle eines Fehlers eine Nachricht auf der JSF-Seite dargestellt werden kann. 

Würde mich über ein paar Anregungen freuen 

Gruß

Mike


----------



## KSG9|sebastian (2. Aug 2007)

Hi,

du willst Daten direkt bei der Eingabe schreiben? Wie willst du den das vom Datenmodel her realisieren, und was passiert wenn einem Benutzer auffällt dass die Zahlen die er eingegeben hat eigentlich falsch sind??
Die einzige sinnvolle und schnelle Möglichkeit ist imho per async. Request (Ajax).
Per Servlet und JavaScript ist schon sehr krude..


----------



## miketech (2. Aug 2007)

Hi,

also natürlich erst, wenn der Benutzer die Daten mit <Enter> abschickt. Aber es wird halt eine Abfolge der Art sein: "5<Enter>", "2<Enter>" etc. 

Man kann das ja in einer Liste speichern und die Liste vielleicht sogar anzeigen. Also eine Tabelle auf der Seite, die nach dem Abschicken neu dargestellt wird (mit reRender) und welche die gespeicherten Daten enthält. Der User könnte dann im Bedarfsfall auswählen, welche Eingabe er rückgängig machen möchte. Hui oder pfui?

Wie gesagt: Es geht einfach darum, dass diese Zahlen gespeichert werden sollen.

Gruß

Mike


----------



## The_S (2. Aug 2007)

joa, also ich würde das so machen:

Eingabefeld mit JS hinterlegt. Bei einem Enter Eingabe auslesen und in eine Liste schreiben. Liste die Möglichkeit zum Removen geben. Anschließend alle Eingaben durch einen Button bestätigen lassen. Daten wegschreiben.


----------



## miketech (2. Aug 2007)

Hi,

dann ist das Problem, dass wenn der Anwender das Browserfenster aus Versehen schließt ist alles weg. Es sollte schon automatisch in die Datenbank geschrieben werden. Aber es ist ja kein Problem das Einfügen mit einem Delete rückgängig zu machen. 

Aber ich sehe schon: Meine Idee mit dem Frame scheint wohl aus einer anderen Zeit zu stammen  Ajax heißt wohl hier die Lösung.

Gruß

Mike


----------



## robertpic71 (3. Aug 2007)

miketech hat gesagt.:
			
		

> Aber ich sehe schon: Meine Idee mit dem Frame scheint wohl aus einer anderen Zeit zu stammen  Ajax heißt wohl hier die Lösung.



Auch ich habe vor neuere Anwendungen auf Ajaxbasis zu erstellen.

Außer einem Katalog habe ich nur ein paar kleinere interne Anwendungen damit erstellt und sehe da keine großen Geschwindigkeitsnachteile gegenüber Swing (im Intranet).

Ich habe hier noch eine Demo von meinen Tests: Ajax Eingabe Demo. 

Im Intranet gibt es überhaupt keine spürbare Verzögerung, auch im Internet bleibt die Antwortzeit (bei schneller Anbindung) deutlich unter einer Sekunde. In diesem Fall passiert das Summieren und das Erweitern der Liste serverseitig. D.h. nach jedem Enter kommt der Server (= Javaprogramm) zum Zug, rechnet, updatet die Bildschirmfelder und weiter gehts. Die Geschwindigkeiten ändern sich auch nicht, wenn ein paar Datenbankoperationen dazukommen.

Womit man JSF am besten Ajax-tauglich macht, weiß ich allerdings auch nicht. Nachdem für mich nur Web mit Ajax in Betracht kommt, habe ich gleich ein Ajax-Framework ZK (Ajax without Javascript) verwendet.


----------

