| 

.NET C# Java Javascript Exception

Einführungsbeispiel

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


[|Start] > [Grails-Buch] > [{$pagename}]
[{TableOfContents}]
\\Zu einer lauffähigen Grails-Anwendung kann man in wenigen Minuten kommen. In diesem Beispiel wird ein kleiner Einkaufsplaner für eine Familie entwickelt. Voraussetzung zum Nachvollziehen des Beispiels ist die [Grails-Installation] von Grails.
!!! Anwendung anlegen
Öffne die Konsole (Eingabaufforderung, Shell ...) und gehe dort in ein Verzeichnis, in dem du Schreibrecht hast. Gib dort folgendes Kommando ein:
{{{ grails create-app einkauf}}}
Damit wird eine Verzeichnis "einkauf", das mit seinen Unterverzeichnissen und Dateien die Grundstruktur für das Projekt vorgibt. Wechsele für die weiteren Befehle, die sich auf die neue Anwendung beziehen, in das Anwendungsverzeichnis:
{{{cd einkauf}}}
!!! Domänenmodell beschreiben
Nun wird es Zeit, das zu Beschreiben, worum es in der Anwendung geht: die Domain-Klassen. Auf eine Einkaufsliste gehören natürlich Artikel, weshalb im nächsten Schritt eine entsprechende Klasse angelegt wird:
{{{grails create-domain-class Artikel}}}
Dieser Befehl erzeugt im Verzeichnis einkauf/grails-app/domain das Grundgerüst der Klasse mit dem Dateinamen Artikel.groovy.
%%prettify
{{{
class Artikel {
}
}}}
/%
Man könnte dieses Grundgerüst genauso gut selbst schreiben und in dem genannten Verzeichnis speichern. Öffne die Datei mit einem beliebigen Texteditor, trage folgenden Inhalt ein und speichere sie:
%%prettify
{{{
class Artikel {
String name
int menge
float einzelpreis
}
}}}
/%
!!! Anzeige und Steuerung erzeugen
Jetzt kommt die Erstellung von Grundgerüsten (Scaffolding) zum Einsatz, die ohne viel Arbeit Seiten zum Auflisten, Anlegen, Anzeigen und Bearbeiten von Objekten sowie den zugehörigen Controller erzeugt. Gib auf der Konsole folgenden Befehl ein:
{{{grails generate-all Artikel}}}
Durch diesen Befehl wurden folgende Verzeichnisse und Dateien angelegt:
* einkauf/grails-app/controllers/__ArtikelController.groovy__
* einkauf/grails-app/views/__artikel/__
** __create.gsp__
** __edit.gsp__
** __list.gsp__
** __show.gsp__
!!! Anwendung starten
Die Anwendung ist nun bereits lauffähig und kann mit
{{{grails run-app}}}
gestartet werden. Im Browser ist sie unter http://localhost:8080/einkauf erreichbar.
[Einführungsbeispiel/einkaufArtikelCreate.jpg]
Nach drei Zeilen Programmierung (die drei Felder der Domain-Klasse) können nun schon Artikel auf die Liste gesetzt, geändert, gelöscht und angezeigt werden! Die Datenbankstruktur wurde im Hintergrund von Grails automatisch angelegt.
!!! Weiterentwicklung im laufenden Betrieb
Grails-Anwendungen können im laufenden Betrieb weiterentwickelt werden. Kompilieren und Neustarten der Anwendung kann normalerweise entfallen. Diese Eigenschaft ermöglicht die Erweiterung der Domain-Klasse um ein weiteres Attribut, das allerdings nicht in der Datenbank gespeichert wird. Öffne die Datei einkauf/domain/Artikel.groovy und ergänze sie:
%%prettify
{{{
class Artikel {
String name
int menge
float einzelpreis
static transients = ['gesamtpreis']
public float getGesamtpreis(){
return einzelpreis * menge
}
}
}}}
/%
Das Schlüsselwort "transient" besagt, dass der Gesamtpreis ein flüchtiges Feld ist und nicht dauerhaft in der Datenbank gespeichert werden braucht. Bisher wurde bei allen Feldern der sogenannte Properties-Mechanismus genutzt, der implizite get- und set-Methoden bereitstellt. Da in dem Beispiel der Gesamtpreis nicht gespeichert sondern berechnet wird, ist das einer der Fälle, wo man mal eine explizite get-Methode braucht.
Nachdem du die Datei Artikel.groovy gespeichert hast, kannst du die Views einfach durch folgendes Kommando neu erzeugen lassen:
{{{grails generate-all Artikel}}}
Wenn du im Browser die Ansicht aktualisierst, siehst du das neue Feld "Gesamtpreis". In den Masken zum Anlegen und Ändern von Artikeln erscheint nun auch ein Feld um den Gesamtpreis einzugeben, was bei einem automatisch berechneten Wert natürlich nicht sinnvoll ist. Der Preis für die Faulheit bei der automatischen Erzeugung ist, dass dieses Feld nun von Hand gelöscht werden muss. Lösche in den beiden beiden Dateien create.gsp und edit.gsp die entsprechenden Zeilen:
{{{
<tr class="prop">
<td valign="top" class="name">
<label for="gesamtpreis">Gesamtpreis:</label>
</td>
<td valign="top" class="value ${hasErrors(bean:artikel,field:'gesamtpreis','errors')}">
<input type="text" id="gesamtpreis" name="gesamtpreis" value="${fieldValue(bean:artikel,field:'gesamtpreis')}" />
</td>
</tr>
}}}
Nach dem Speichern werden die Änderungen sofort von Grails bzw. dem Anwendungsserver Jetty übernommen. In der Tabelle erscheint jetzt das neue Attribut "Gesamtpreis", das aus "Menge" und "Einzelpreis" berechnet wird.
[Einführungsbeispiel/einkaufArtikelList.jpg]
!!! Weitere Einführungen
* [Grails-Tutorial|http://www.moscon.de/grailstutorial/]

Diese Seite zeigt Informationen zu "Einführungsbeispiel" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.