Michael
Michael

Reputation: 2510

Create custom GSP tag without writing Groovy code

Is it possible to create a custom GSP tag without writing Groovy code and embedding my HTML in the code (i.e. more of a JSP style way of creating a custom tag)?

I have a menu that consists of a bunch of items something like:

<li class="menu-item">
  <g:link controller="someController" action="someAction" id="123">
    My Item Text
  </g:link>
</li>

I would like to create a new GSP tag to simplify my pages since it will be repeated multiple times. So, I'd like to create something like:

<my:menuitem controller="someController" action="someAction" id="123" text="My Item Text"/>

I know that I can create a custom taglib and create the tag using Groovy code. However I really don't like the idea of embedding HTML into a Groovy file. In the past I have created JSP taglibs in essentially a JSP file without writing Java code. So far looking at the documentation for Grails I haven't seen a similar style.

As a side note, can custom JSP tags be used within GSP?

Upvotes: 1

Views: 851

Answers (2)

grantmcconnaughey
grantmcconnaughey

Reputation: 10719

The only way I can see to do what you want to do without a Taglib is to use g:render and pass in your values into the model attribute. Like this:

<g:render template="myTemplate" model="[controller: 'someController', action: 'someAction', id: 123, text: 'My Text Item']" />

Then in your actual template you will have the following:

<li class="menu-item">
  <g:link controller="${controller}" action="${action}" id="${id}">
    ${text}
  </g:link>
</li>

Upvotes: 2

nickdos
nickdos

Reputation: 8414

You can do this with a template via the render tag, as explained in the "Views and Templates" section of the docs. Its worth noting you name the template file with a leading underscore but you refer to it in the render tag without the underscore.

The other alternative is to use a custom taglib as you described but to create your HTML with the Groovy MarkupBuilder. It takes a bit of getting used to (syntax is a bit strange) but once you've done a few times it becomes second nature.

Upvotes: 4

Related Questions