Mittwoch, 23. Mai 2012


Artikel

Februar 2010 | Artikel

FormEngine: Multidynamische Formulare

(Link zum Artikel: http://www.entwickler.de/jaxenter//002893)

Ein Java Magazin Tool-Radar

Text: Udo Stark
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Formulare gehören zur täglichen Arbeit eines Webentwicklers. Dabei steigen die Anforderungen an moderne, interaktive Formulare kontinuierlich. Sofortige Validierung der Eingaben oder die dynamische Aktualisierung von Auswahllisten sind heute kaum noch wegzudenken. Verschiedene Java-Frameworks oder auch übergeordnete Standards wie XForms wollen die Entwicklung solcher Formulare erleichtern. Bei Projekten mit festen Datenstrukturen können diese Frameworks auch hilfreich sein. Wird das Modell, auf dem die Formulare arbeiten, erst zur Laufzeit festgelegt, ist die Sache schon komplizierter – beispielsweise bei einem dynamischen CMS.

Die Firma imatics Software GmbH hat im Rahmen ihrer Produktentwicklung ein Framework entwickelt, das neben zahlreichen Ajax-Funktionalitäten die Definition von Formularen anhand einer XML-Beschreibung oder über ein Java-API zur Laufzeit ermöglicht. Dabei wird strikt zwischen der Formulardefinition und der Ausführung von Instanzen unterschieden. Eine Formular-Definition beschreibt eine Datenstruktur, die sich aus typisierten Komponenten zusammensetzt. Damit bildet sie gleichzeitig eine Schnittstelle zum Modell der Anwendung für den Datenaustausch über ein Connector-API. Zu den Datentypen zählen neben den Java-Standardtypen auch Strukturelemente wie Gruppen und Repeats, die eine hierarchische Datenstruktur und tabellarische Eingabemasken ermöglichen. Wesentliche Eigenschaften der Komponenten sind internationalisierte Beschriftungen, Validierungsregeln, dynamische Berechnungen sowie die für die Darstellung und Eingabe zu verwendenden Renderer. Der in sich geschlossene Lebenszyklus einer Formularinstanz (Kommunikation per Ajax) sorgt dafür, dass die Seite vom Erzeugen und der ersten Ausgabe bis zum Submit nicht neu geladen werden muss.

Validierer, Kalkulatoren und Renderer

Die Überprüfung der eingegebenen Inhalte erfolgt anhand von Validierern ausschließlich in Form von Java-Klassen. Auch die sofortige Überprüfung einer Eingabe noch vor dem abschließenden Submit wird per Ajax-Request serverseitig durchgeführt, sodass keine doppelte Implementierung der Regeln für die clientseitige Validierung und Fehleranzeige nötig ist. Validiererklassen implementieren einfache Regeln, die in der Formulardefinition miteinander kombiniert werden können. Für die Standardprüfungen sind bereits viele Validierer vorhanden. Ebenso können aber auch eigene Validierer verwendet werden. Dabei besteht die Möglichkeit, die Gültigkeit von Inhalten anderer Formularfelder abhängig zu machen.

Auf gleiche Weise können auch Kalkulatoren an Formularkomponenten gebunden werden. Kalkulatoren ermöglichen die dynamische Berechnung von Komponentenwerten. Die Berechnungen können dabei wiederum auf Basis anderer Komponenteninhalte erfolgen. Änderungen an diesen Komponenten führen dabei sofort zur Neuberechnung des Werts und Aktualisierung in der Eingabemaske. So können z. B. sinnvolle Vorbelegungen für Felder auf Basis anderer Felder umgesetzt werden. Die Ergebnisse der Kalkulatoren können als Parameter für weitere Kalkulatoren dienen, um sie zu komplexen Berechnungen zu kombinieren. Eigene Implementierungen können die Standardkalkulatoren ergänzen. Kalkulatoren können auch verwendet werden, um die Inhalte von Auswahllisten und Baumstrukturen dynamisch zu erzeugen.

Zur Darstellung und Bearbeitung einer Formularinstanz erzeugt die FormEngine ein valides XHTML-Codefragment, das an beliebiger Stelle innerhalb einer HTML-Seite eingebunden wird. Die Ausgabe einer Komponente erfolgt durch die an sie gebundenen Renderer, wovon sie gleichzeitig mehrere besitzen kann. So können Werte einer Komponente auf unterschiedliche Weise dargestellt und eingegeben werden. Beispielsweise kann ein Datum durch ein einfaches Textfeld oder ein Kalender-Popup erfasst oder aber aus einer Auswahlliste mit vorgegebenen Tagen ausgewählt werden. Die FormEngine liegt derzeit in der Version 1.5 vor und wird seit zwei Jahren in der imatics *ProcessSuite und dem internen CMS zur Generierung der Eingabemasken eingesetzt.

Udo Stark ist Projektleiter und Senior Java Developer im Umfeld von Java-Webtechnologien bei der imatics Software GmbH.
  1. http://www.form-engine.de/

andere Artikel dieser Serie

Kommentare