Creating select tag with optgroup in Grails

10 / Aug / 2010 by Vishal Sahu 2 comments

In one of my projects i needed to create a select-input tag with OPTGROUP options.
I searched a lot about it and found that g:select tag do not support OPTGROUP

So to solve this problem, i created a simple optgroup tag using Html and grails taglib.

I created a Map for the values to be used in the select tag and pass it to the test.gsp page from the controller.
Say Map dataMap=[“Car”:[“Car A”,”Car B”,”Car C”],”Truck”:[“Truck A”,”Truck B”]]

I put the tag in test.gsp where i want to display the select dropdown


In my TestTaglib.groovy, i defined the tag as

class TestTagLib {
    static namespace = 'test'

    def optGroup = {attrs ->
        Map dataMap = attrs['dataMap']
        out << g.render(template: 'layouts/optSelect', model: [dataMap:dataMap])

I created a template "_optSelect.gsp" under the layouts folder

This generated the required SELECT dropdown with OPTGROUP and solved the problem.

Hope it helps.


Vishal Sahu


comments (2)

  1. Farid

    Thanks a lot Vishal. This Taglib made my day.. Morevover, I have added the support for value to it through following implementation.

    Suppose, Map dataMap=[“Car”:[“Car A”,”Car B”,”Car C”],”Truck”:[“Truck A”,”Truck B”]]
    and Map valueCodes = [‘Car A’:10, ‘Car B’: 20, ‘Car C’: 30, ‘Truck A’:100, ‘Truck B’: 110]


    TagLib Definition:

    def optGroup = {attrs ->
    Map dataMap = attrs[‘dataMap’]
    Map valueCodes = attrs[‘valueCodes’]
    out << g.render(template: '/layouts/optSelect', model: [dataMap: dataMap, valueCodes: valueCodes])

    Template definition in _optSelect.gsp:

    (Select One)


    Thanks again for sharing it.


Leave a Reply

Your email address will not be published. Required fields are marked *