You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@sling.apache.org by Florian Salihovic <Om...@gmx.de> on 2014/05/12 11:29:45 UTC

Sling Scipting, Groovy and sling.include

I implemented a Groovy/Sling version of
http://kotlin-nosql-mongodb-petclinic.herokuapp.com. The source code is
available here https://github.com/floriansalihovic/pet-clinic. The
application is fully functional (except for the search, which will be
implemented soon).
 
The problem I am facing now towards the end of the project in the
modularisation of scripts/views with Groovy. I implemented a
BindingsValuesProvider which works fine.
 
|     package io.github.floriansalihovic.petclinic.scripting;
|
|     import groovy.xml.*;
|     import org.apache.felix.scr.annotations.*;
|     import org.apache.sling.scripting.api.*;
|     import org.slf4j.*;
|     import javax.script.*;
|     import java.io.*;
|
|     @Component
|     @Service
|     public class MarkupBuilderBindingsValuesProvider implements
BindingsValuesProvider {
|         private final static Logger logger =
LoggerFactory.getLogger(MarkupBuilderBindingsValuesProvider.class);
|         @Override
|         public void addBindings(Bindings bindings) {
|             final PrintWriter out = (PrintWriter) bindings.get("out");
|             if (null == out) {
|                 logger.error("Expected print writer is not available.");
|             } else {
|                 logger.info("Providing binding markupBuilder:{}.",
MarkupBuilder.class.getName());
|                 bindings.put("markupBuilder", new MarkupBuilder(out));
|             }
|         }
|     }
 
I can use "markupBuilder" in scripts directly. After implementing components
/apps/petclinic/components/footer, /apps/petclinic/components/header and
/apps/petclinic/components/navigation as well as several page components in
/apps/petclinic/components/pages, implementing a view with the MarkupBuilder
is quite easy and works in the expected way.
 
|     markupBuilder.html {}
 
When using the components, I had to use them in a way in an unexpected way.
 
|     sling.include(resource, 'petclinic/components/header')
|     sling.include(resource, 'petclinic/components/navigation')
|
|     markupBuilder.html {
|       body {
|         // ... adding the specific pages content    
|       }
|     }
|
|     sling.include(resource, 'petclinic/components/footer')
 
I would have thought that i'd use the sling.include with in the closure. But
that's definitely not the case, because using it that way would wrap and
html element around the included scripts.
 
I thought that the include would "just" act as a route, but apparently it
does a bit more or the markup builder does more then expected (wrapping the
included components in an additional HTML tag).
 
Is there any additional information on how to use Groovy and it's behaviour?



--
View this message in context: http://apache-sling.73963.n3.nabble.com/Sling-Scipting-Groovy-and-sling-include-tp4033171.html
Sent from the Sling - Users mailing list archive at Nabble.com.

Re: Sling Scipting, Groovy and sling.include

Posted by Florian Salihovic <Om...@gmx.de>.
Actually it works fine when the component is a simple div. Other components
are placed properly where they belong.



--
View this message in context: http://apache-sling.73963.n3.nabble.com/Sling-Scipting-Groovy-and-sling-include-tp4033171p4033189.html
Sent from the Sling - Users mailing list archive at Nabble.com.

Re: Sling Scipting, Groovy and sling.include

Posted by Florian Salihovic <Om...@gmx.de>.
After adding a couple of more components ... it works like a charm.



--
View this message in context: http://apache-sling.73963.n3.nabble.com/Sling-Scipting-Groovy-and-sling-include-tp4033171p4033188.html
Sent from the Sling - Users mailing list archive at Nabble.com.