Zusatzinformationen
Neuigkeiten in der Version 2.3
Das Framework wurde auf groovy 1.6.0 angepasstdas Menue kann in den Linkbar ${linkbar} und in den Backlinkbar ${backlinkbar} getrennt werden.
Um diese Funktionen zu demonstrieren wurde ein weiteres Demononstrationenprojekt erstellt. Dieses zeigt ein Drei-Spaltenlayout.
Neuigkeiten in der Version 2.2.4
Minor BugfixesIm Kriteriebuilder wurde die Option "order" eingebaut. Beispiel order(maxSalary:'desc',jobID:'ASC')
Neuigkeiten in der Version 2.2
eachDomain wurde um die Möglichkeit erweitert Abfragen basierend auf den Domainfeldnamen zu Formulieren. Dazu wurde ein Groovy-Builder erstellt.Beispiel:
jobs.eachDomain(criteria:{greaterequals(minSalary:8000)}){domJob->
closure.call(domJob)
}
Details können in den Artikel unter "eachDomain mit Kriterien" entnommen werden
Neuigkeiten in der Version 2.00
Es wurde Dynamische Abfragemöglichkeite eingebaut.Beispiel:
def query1 = {Closure closure->
jobs.eachDomainByJobTitleLikeAndMinSalaryGreaterThan(
orderby:['minSalary','JobID'],
conditions:['Pu%',1000]) {domJob->
closure.call(domJob)
}
}
Für Details stehen die Demonstrationsapplikation "sonstige" --> finder und
ein Artikel ueber Dynamische Abfragen zur Verfügung.
Neuigkeiten in der Version 1.10
Standard HTTP Method GET/POST
Das Framewerk verwendete bei den als Standardvorgabe bei HTTP Requests "POST". Dieses Verhalten kann in der Taglib umgestellt werden.def taglib = new Taglib(request:request, httpMethod:'GET')Im laufenden Betriebs kann dies durch
taglib.httpMethod='GET'geschehen.
Inlineedit
In einer Grid Maske kann durch betätigen der AKtionsschaltfläche 'edit' der Inhalt der gewählten Zeile in den Eingabebereich kopiert werden.Beispiel
Dialoge
Das Framework stellt die Möglichkeiten zu Verfügung Dialoge in den Workflow einzubauen. Dies ist zum Beispiel notwending um nach Löschoperationen eine Sicherheitsabfrage zu implementieren.Die Funktion ist in der Klasse framework.helper.Dialog implementiert.
Im viewhandler kann diese automatisch aufgerufen werden.
Viewhandler crud = new Viewhandler(
controller:this,
action:'grid',
gridConfirmOnDelete:Viewhandler.GRID_COFIRM_ON_DELETE,
viewBindings:[
list:list
]
)
controller:this,
action:'grid',
gridConfirmOnDelete:Viewhandler.GRID_COFIRM_ON_DELETE,
viewBindings:[
list:list
]
)
Implementation im Viewer
Neuigkeiten in der Version 1.9
DAO: (DataAccessObject)
Das ist die Basisklasse für die Domainklassen.Transaktionskontrolle
- beginTransaction()
Einschalten der Transaktionskontrolle - rollback()
Datenbankänderungen werden zurückgesetzt - commit()
Bestätigen der Datenbanänderungen - autocommit()
Schaltet die Transaktionskontrolle wieder aus. Jede Datenbankänderung wird sofort durchgeführt.
Beispiel ist in der Demoapplikation im Pfad '/root/extras/sonstiges/transaction' demonstriert.
setDomainField
Es wurde die Möglichkeit geschaffen, Daten in die Domain zu schreiben und die Feldvalidatoren zu nutzen.
jobs.clearErrors()
jobs.setDomainField('a123','maxSalary')
jobs.setDomainField('123.45','minSalary')
Fehler können auf zwei Arten erkannt werden.
- die Methode liefert einen Wahrheitswert zurück
- Beim Auftreten eines Fehler wird in die Liste errors der Domain Fehlermeldungen eingetragen.
Die Datenstruktur errors ist eine Liste mit Map Einträgen. Die Einträge haben folgende Schlüselwerte:
- 'field': Feldname
- 'message': Fehlermeldung
- 'value': Übergebene Daten
jobs.errors.each{error->
render "Im Feld ${error.field} trat der Fehler: ${error.message} auf. Value: ${error.value}
"
}
In der Demoapplikation wird dies im Pfad'/root/extras/sonstiges/setdomainfield' domonstriert.
Alternativer Container
Das Framwork liefert sein Ergebnis standardmäßig in den Container 'main.gsp' Im Controller kann durch die Anweisung setContainer(filename:'alternative.gsp') umgesetzt werden.Der Container ist im Verzeichnis WEB-INF zu notieren.
Ein Beispiel ist im Pfad /root/extras/sonstiges/plainlist demonstriert.
Neuigkeiten in der Version 1.8
Bugfix Version: 1.81Es wurden Bugs in der Demonstrations Applikation entfernt. Danke für den Test an "HUMP".
- Demonstrationsapplikation:
Die Sourcen wurden um noch mehr Kommentare erweitert. - Die Klasse Viewehandler:
Die Reihenfolge der Prüfungen (validatorren) wurde vereinheitlicht- Aufrufreihenfolge
- Feldprüfung validate in meta.fields
- Datensatzprüfung validate in meta
- Der Event befor_write
- Erweiterungen der Feldbeschreibungen in der Domain (meta.fields):
Es wurden weiter Events eingebaut:
- after_read: wird nach dem einlsen des Datensatzes aus der Db in die Domain aufgerufen
- before_write: wird vor dem Schreiben in die Db und nach validate aufgerufen
- after_cgi: wird aufgerufen, wenn die Daten aus den CGI Variable in die Domain übertragen wurden.
salary:[ dbfield:'SALARY', type:'Double', /** * Diese Closure wird nach dem Lesen der Daten aus dem * Datenbakrecord aufgerufen. Der Returnwert wird in * das Feld der Domain geschrieben. */ after_read:{value->return value?:0.0}, /** * Diese Closure wird vor dem Schreiben der Daten * in den Datenbakrecord aufgerufen und das Ergebnis * in das Datenfeld geschrieben. */ before_write:{value->return value * 1.0}, /** * Diese Closure wird vor dem * schreiben aufgerufen. */ after_cgi:{value->return (value =~ /,/).replaceFirst('.')} ],
- sqlCount() (COUNT(*)
- sqlAvg() (AVG)
- sqlSum()< (SUM)/li>
- sqlMin() (MIN)
- sqlMax() (MAX)
Neuigkeiten in der Version 1.7
- Es wurde die Domonstrationsapplikation völlig neu überarbeitet.
- Die Klasse CRUD wurde stillgelegt und durch Viewhandler ersetzt
- Die Klasse Taglib wurde erweitert
Domonstrationsapplikation
Die Applikation wurde vollständig mit der Klasse Viewhandler entwickelt. Durch Erweiterung der Klasse Taglib konnte ein wesentlich kompakterer Code erstellt werden.
Was wird demonstriert
-
EmployeesDomain
Die verschiedenen Möglicheiten der Konfigureation der Domain (Metadaten).
-
JobsDomain
Zeigt die Verwendung vom Domainmethoden zum Erzeugen der Daten für eine Datasource welche in der Taglib benötigt werden.
-
Grid (Datenbearbeitung in Tabellenform)
extras -> recht zeigt die Verwendung von Grid -
Auswahlliste mit Editiermaske
extras -> lov zeigt die Verwendung einer Auswahliste mit Editiermaske. -
Eine Auswahlliste mit Paginierung
extras -> jobs zeigt eine Auswahlliste mit Paginierung. -
Auswahlliste mit Filter und Paginierung
extras -> employees zeigt eine Filterfunktion bei den Auswahlliste, - usw.
Viewhandler
Die Klasse CRUD wurde vollständig von der Klasse Viewhandler ersetzt. CRUD wird nicht mehr gewartet aber aus kompatibilitätsgründen weiter ausgeliefert.Taglib
Erweiterte Funktionen- form
taglib.form(name:'edit') erzeugt einen Formtag - hidden
taglib.hidden name:'action', value:'grid' erzeugt eine Hidden-Tag