Donnerstag, 18. Oktober 2007

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Grails eXchange] Session Advanced Layouts with SiteMesh (Joe Walnes)

Mit SiteMesh regelt man alles rund ums Layout, nicht nur in Grails. Ich selbst bin erst mit Grails auf SiteMesh aufmerksam geworden, wie die meisten anderen der 10 weiteren Zuhörer hier auch. Mehr als das Grundprinzip habe ich nicht umgesetzt, daher bin ich an den Advances-Sachen interessiert.

Joe zeigt ersteinmal, warum jsp:include Dreck, mindestens aber nicht DRY ist. Dann präsentiert er SiteMesh außerhalb von Grails. Er macht das live. Zuerst erstellt er eine HTML-Seite, absolut rudimentär. Dann erzeugt er einen SiteMesh-Decorator, ein XML-File. Dieses enthält alle Informationen zum Layout, beispielsweise auch das CSS (kann auch eine CSS-Datei referenzieren). Über ein Config-File (wird bei Grails per Konvention vermieden) werden die beiden Dateien zusammengebracht.

Beeindruckend, wie einfach das schon ohne Grails funktioniert. Ich dachte immer, Grails macht noch viel mehr im Hintergrund. Tatsächlich sagt Joe, dass Grails SiteMesh aufgrund der Einfachheit nutzt.

Technisch bindet sich SiteMesh als Filter in eine WebApp ein und filtert den jeweiligen Request. SiteMesh selbst ist ein jar-File. Dann gibt es noch beschriebene Config-Datei. Und das war's auch schon.

Interessant, wie man in einem Decorator auf die Elemente der Content-HTML-Seite verweist:


So wird der Titel aus der Inhalts-HTML referenziert.

In Grails kann man ein Layout entweder per Konvention angeben, oder aber per Meta-Tag im Head einer HTML-Seite. Berechtigte Frage aus dem Publikum: Gibt's da nicht ein Problem, wenn man aus der HTML-Seite heraus das Layout referenziert? Jap, gibt es, daher sollte man lieber immer die Konvention benutzen.

Die Konvention ist, dass man die Decorator abhängig vom Controller und den Actions in Grails in entsprechende Verzeichnisse legt.

Jetzt wird's spannend: Joe schlägt vor DecoratorMapper zu benutzen, z.B. den PrintDecoratorMapper, der alle Requests mit print=true auf ein entsprechendes Layout umleitet. Es gibt noch weitere DecoratorMapper. Man kann Bereiche in Grails per Tag g:applyLayout mit unterschiedlichen Layouts versehen. Inhalte der HTML-Seite können in den Dekoratoren benutzt werden, wie etwas body, head, meta und spezielle Tags wie content und param.

Mir kommt gerade die Idee, Fittests damit für den Kunden ziemlich einfach attraktiv zu machen... :-)

SiteMesh ist schnell, weil der Parser "custom written" ist. Der Parser kommt mit wirklich sehr schrottigem HTML aus - naja, nicht unbedingt das, was für Disziplin im Team sorgt, aber bestimmt hilfreich, wenn man externe HTML-Seite, auf die man selbst keinen Einfluss hat, neu gestalten möchte (HTML aus MS Word mit Fittests vom Kunden vielleicht).

Joe stellt jetzt ein Pattern vor, das nichts mit Grails zu tun hat, aber sehr interessant ist aufgrund der Art, wie er damit umgeht. Es geht um ein CMS. Seine Definition von CMS ist: jemand, der keine Ahnung hat von HTML, möchte seine Webseite updaten. Er möchte mit einem Tool arbeiten, dass er kennt (MS Word). Damit speichert er Dateien in HTML ab. Diese werden mit SiteMesh dann aufbereitet. Das Design stammt von einem Webdesigner. SiteMesh selbst wird aufbereitet über ein wenig Programmierarbeit von einem Entwickler. Sehr pragmatisch und einfach - und bestimmt sehr viel besser handhabbar als Typo3!

Guter Vortrag, netter Vortragender, empfehlenswert.

blog comments powered by Disqus