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.
