SmartGWT – Tipps und Tricks

1 Kommentar

SmartGWT ist eine sehr interessante GWT Erweiterung, um Rich Client Web Anwendungen zu entwickeln. Wir haben dieses Framework in einem Projekt benutzt, um eine bestehende Client Anwendung ins Web zu bringen.

Sehr hilfreich waren dabei die unzähligen Widgets und der SmartGWT Showcase in dem man auch die dazugehörigen Code Schnipsel sehen kann.

Im Großen empfanden wir die Entwicklung mit dieser Bibliothek als sehr angenehm. Allerdings sind uns auch ein paar Unstimmigkeiten aufgefallen, zu denen wir Workarounds gefunden haben, über die ich hier schreiben möchte.

Probleme bei der Enwicklung

IDs von Widgets

Die IDs der Oberflächen Widgets sollten immer als erstes direkt nach der Initialisierung gesetzt werden. Wenn man die ID erst nach einigen Zuweisungen wie addCellDoubleClickHandler setzt, wird man sich wundern, warum der Doppelklick keine Wirkung hat.

list = new ListGrid();
list.setID("list");
list.addCellDoubleClickHandler(new SearchResultDoubleClickHandler(this));

Dies kann ich isoliert mit der aktuellsten SmartGWT 2.4 und GWT 2.2.0 nicht mehr nachstellen, es scheint also mitlerweile behoben zu sein.

TextItem.setKeyPressFilter

Bei der Verwendung von der Funktion setKeyPressFilter bei dem Widget TextItem kommt es zu Problemen, wenn man zusätzlich zu dem Filter noch ein KeyPressHandler implementieren möchte. Der eigene KeyPressHandler deaktiviert dann leider den KeyPressFilter. Der Workaround ist einen zusätzlichen zweiten KeyPressHandler zu schreiben, der die gleiche Funktionalität wie der KeyPressFilter hat und man somit das Framework Feature leider nicht verwendet.

private class NumericKeyPressHandler implements KeyPressHandler {
		/**
		 * @see com.smartgwt.client.widgets.form.fields.events.KeyPressHandler#onKeyPress(com.smartgwt.client.widgets.form.fields.events.KeyPressEvent)
		 */
		public void onKeyPress(KeyPressEvent event) {
			if (!event.getKeyName().matches("[0-9]")) {
				event.cancel();
			}
		}
	}

Hierfür habe ich einen Bug bei SmartGWT eingestellt: http://code.google.com/p/smartgwt/issues/detail?id=576. Dieser Bug wurde für die SmartGWT Version 2.4 bestätigt und ist in den nightly builds behoben.

Probleme beim Zusammenspiel von SmartGWT und automatisierte Tests mit dem Robot Framework

Offline.put/.get

Die Offline Funktionalität von SmartGWT ist ein wunderbares Feature, um mit HTML5 Funktionalitäten Werte auf dem Client zu persistieren und somit auf manuelles setzen von Cookies zu verzichten. Allerdings konnten wir im Zusammenspiel mit unseren automatisierten Robottests kein Keyword finden, welches uns die Inhalte des permanenten Browser Speichers ausliest bzw. schreibt. Dies kann allerdings durch ein einfaches Javascript umgegangen werden. Dieses Beispiel setzt einen Eintrag im „Permanent Browser Cache“.

Execute JavaScript  window.localStorage['${name}']='${value}';

DOCTYPE tag in HTML Bootstrap Datei

Die SmartGWT Best Practices schreiben vor keinen Doktype Tag in der bootstrap HTML Datei zu verwenden, um z.B. den IE im „quirks mode“ starten zu lassen. Dies führt allerdings zu keinen Screenshots in automatisierten Robottests. Als Lösung hierfür haben wir für den Selenium Test eine extra mainAccTest.jsp erstellt, der einen Doctype Header besitzt und die normale main.jsp includiert. Diese jsp wird ausschließlich für die automatisierten Tests verwendet und somit funktionieren auch die automatisierten Screenshots bei den Tests wieder.

 

Weitere SmartGWT Erfahrungen findet man hier: Testing SmartGWT Applications with Selenium and Robot Framework.

Ansgar Schulte

Ansgar Schulte ist das Schweizer Taschenmesser der Software-Entwicklung. Er kann in jedem Projekt seine Skills einbringen und dieses voran treiben.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

  • Ansgar Schulte

    Hi
    I´ve checked it twice within our application before I published it. But I will review it again and check the smartgwt library we have used.
    If I am not able to reproduce it with the actual library, I will mention it and revise this blog entry.

    Regards
    Ansgar

Kommentieren

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.