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有比这更优雅的方法吗?实际上,我需要装饰的标签不仅仅是select
和date
,而且每个装饰标签中的代码几乎相同。如果可能的话,我想消除这种重复吗?
答案 0 :(得分:0)
按名称空间调用其他taglibs标记,例如g.link([controller: 'one'], { 'link text' })
或bean.select(attrs)
。
您可以尝试在taglib中编写getProperty
并返回正确的闭包 - 我不确定。