To create a more modular Groovy Server Page we can use Grails' template support. We use <g:render template="..." ... /> or <tmpl:templateName ... /> tags to render the template content. These tags can have a body. The body of the tag is then available in the template code. We use the expression ${body()} in our template to output the body content.
Suppose we have the following template code:
<%-- File: grails-app/views/product/_productView.gsp --%>
<h2>${product.name}</h2>
${body()}
We can use the template with different body contents:
...
<g:each in="${products}" var="product">
<g:render template="productView" model="[product: product]">
<g:link uri="/">Back to home</g:link>
</g:render>
</g:each>
...
<g:each in="${products}" var="product">
<tmpl:productView product="${product}">
<g:link controller="product" action="details" id="${product.id}">More details</g:link>
</tmpl:productView>
</g:each>
...
If the content of the body has HTML tags and we have set in grails-app/conf/Config.groovy the property grails.views.default.codec to html we get escaped HTML. Instead of using ${body()} we must then use <%= body() %>.