装饰Grails标签

时间:2011-04-20 09:50:14

标签: grails groovy grails-plugin taglib

Grails bean fields插件提供的taglib使用命名约定来确定应该为它生成的每个<input>元素使用的标签键。我想在不直接更改插件源代码的情况下更改此约定的详细信息。

我正在考虑的方法是创建自己的标签lib

class MyBeanTagLib {

  static namespace = 'mybean'

  private void setLabelKey (attrs) {

    if (!attrs.labelKey) {

      // in reality calculation of the default key is a bit more complicated :)
      attrs.labelKey = 'my.default.key'
    }
    return attrs
  }

  // renders a combo box
  def select = { attrs ->
     attrs = setLabelKey(attrs)

     // Now call the bean-fields select tag, passing along attrs     
  }

  // renders a datePicker
  def date = { attrs -
     attrs = setLabelKey(attrs)

     // Now call the bean-fields date tag, passing along attrs     
  }
}

我的第一个问题是如何调用我试图装饰的标签。换句话说,什么代码应该取代评论

  

//现在调用bean-fields ...

我可以这样做:

new BeanTagLib().select(attrs)

但我怀疑这是从另一个调用一个taglib的正确方法。

其次,装饰taglib有比这更优雅的方法吗?实际上,我需要装饰的标签不仅仅是selectdate,而且每个装饰标签中的代码几乎相同。如果可能的话,我想消除这种重复吗?

1 个答案:

答案 0 :(得分:0)

  1. 按名称空间调用其他taglibs标记,例如g.link([controller: 'one'], { 'link text' })bean.select(attrs)

  2. 您可以尝试在taglib中编写getProperty并返回正确的闭包 - 我不确定。