[Grails eXchange] Session Ajax Development with Grails & Dojo
Sven arbeitet bei Yahoo und erzählt heute über Dojo. Hä? Nope, richtig gelesen. Obwohl Svens ehemalige Firma ist von Yahoo aufgekauft worden. Daher arbeitet er bei Yahoo. Vor dem Kauf hat er schon seinen Vortrag eingereicht bei der Grails eXchange, und daher macht er heute Dojo.
Mit Grails kommt noch die alte Version von Dojo, 0.4.3 daher. Will man Dojo 0.9 benutzen, muss man das momentan noch selbst installieren. Grails hat spezielle Tags, die Ajax ermöglichen, und unter der Haube wird dann dort auch Dojo benutzt, oder Yahoo! UI oder Prototype, je nach dem, was man haben möchte.
Ajax meint meistens Ajax plus Widgets, und Dojo ist reich an Widgets. Für diese gibt es allerdings keine Tags; Dojo-Widgets muss man selbst coden in JavaScript.
Sven zeigt live eine Grails-WebApp. Dann zeigt er die Tags in Grails, die das Ajaxzeug machen. remoteLink: Damit kann man einen Link anlegen, der eine Action aufruft, deren Antwort dann in ein DIV-Tag geladen wird. formRemote: Ein Formular, nicht-ajaxifiziert als form-Tag realisiert, wird asynchron abgeschickt. submitToRemote: ähnlich wie formRemote, allerdings stellt dieses Tag einen Button innerhalb eines normalen Formulars dar, mit dem man den Formularinhalt asynchron abschicken kann. remoteField: ein Feld innerhalb schickt sich selbst ab, wenn es geändert wird. Alle Tags können mit Event-Handlern versehen werden.
Sven priorisiert JSON vor XML (wer tut das nicht :-) ) und zeigt u.a. den JSON-Builder, eine DSL, mit der man JSON bauen kann. Mit JSON zeigt er dann auch ein paar Anwendungsbeispiele, beispielsweise eine Drop-Down-Liste, die Vorschläge automatisch beim Eintippen anbietet, indem die Vorschläge asynchron vom Server geholt werden. Sven endet mit ein paar Folien zu Resourcen.
War ganz nett; auf jeden Fall sind die Folien einen Blick wert, wenn man erste Gehversuche in Grails + Dojo unternehmen möchte, denn da stehen ein paar gute Beispiele drin, wie die ajaxifizierten GSP mit den entsprechend JSON zurückgebenden Action in den Controllern zusammenarbeiten.