Injecting Method to trim string length on gsp pages

03 / May / 2010 by Aman Aggarwal 3 comments

Restricting the length of a string on gsps is a common scenario in most of our projects.
Groovy’s metaprogramming magic made it too simple for me. I added the following lines of code to Bootstrap.groovy:

Object.metaClass.trimLength = {Integer stringLength ->

    String trimString = delegate?.toString()
    String concatenateString = "..."
    List separators = [".", " "]

    if (stringLength && (trimString?.length() > stringLength)) {
        trimString = trimString.substring(0, stringLength - concatenateString.length())
        String separator = separators.findAll{trimString.contains(it)}?.min{trimString.lastIndexOf(it)}
            trimString = trimString.substring(0, trimString.lastIndexOf(separator))
        trimString += concatenateString
    return trimString

Now, for an instance of class Person:

class Person {
    String name

    String toString(){
        return name

Person person = new Person(name: "Aman Aggarwal")

I can simply write this code in gsp:


which renders output:


Hope it helps.

~Aman Aggarwal


comments (3)

  1. Farid

    Thanks Aman. This blog really made my life easy in my current project. I am really surprised that groovy does not provide something of this sort out of box.

  2. Lavern Montezuma

    Please let me know if you’re looking for a article writer for your weblog. You have some really great articles and I think I would be a good asset. If you ever want to take some of the load off, I’d love to write some material for your blog in exchange for a link back to mine. Please blast me an email if interested. Thank you!

  3. Hubert Klein Ikkink

    We used the following approach on our project:

    // File: Bootstrap.groovy
    import org.apache.commons.lang.StringUtils

    def init = { ctx ->
    String.mixin StringUtils

    Now we can use “abcdefg”.abbreviate(6) to get ‘abc…’
    What happened? We added all static methods from StringUtils with a first argument of type String to the String class, so we can use them in our application.


Leave a Reply

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