To have clean and re-usable Groovy Server Pages (GSP) we can use templates on our pages. A template contains HTML and code that we can maintain separately. In this post we learn about the template namespace to include a template on our page.
Suppose we have a page in our application that display a list of products. Each product has several properties we show. The template for a product is:
<%-- File: grails-app/views/product/_productView.gsp --%>
<li class="${cssClassName}">
${product.identifier}
${product.name}
<g:formatNumber number="${product.price}" type="currency" currencyCode="EUR"/>
</li>
We can use the template with the g:render tag and template attribute on our page:
<%-- File: grails-app/views/product/list.gsp --%>
...
<ul>
<g:render template="productView"
var="product" collection="${products}"
model="[cssClassName: 'info']"/>
</ul>
...
<ul>
<g:each in="${products}" var="product">
<g:render template="productView" model="[product: product, cssClassName: 'info']"/>
</g:each>
</ul>
...
But we can also use the template namespace feature in Grails. We define a tag with the namespace tmpl and the tagname is our template name. We pass the model for the template through the attributes. Each attribute name/value pair is passed as model to the template.
<%-- File: grails-app/views/product/list.gsp --%>
...
<ul>
<g:each in="${products}" var="product">
<tmpl:productView product="${product}" cssClassName="info"/>
</g:each>
</ul>
...