这似乎是不可能的。 FormTagLib.groovy 类的源代码显示,如果没有给出 id,则有一个标志决定是否写入与名称相同的 id 属性。不幸的是,它已打开,并且无法从外部进行配置。见以下代码:
首先,我们有g:textField的来源,它调用fieldImpl
def textField = { attrs ->
attrs.type = "text"
attrs.tagName = "textField"
fieldImpl(out, attrs)
}
方法fieldImpl (full source available on Github) 调用outputAttributes。注意第三个参数true
def fieldImpl(out, attrs) {
resolveAttributes(attrs)
out << "<input type=\"${attrs.remove('type')}\" "
outputAttributes(attrs, out, true)
out << "/>"
}
outputAttributes 看起来像这样(缩写):
void outputAttributes(attrs, writer, boolean useNameAsIdIfIdDoesNotExist = false) {
attrs.remove('tagName') // Just in case one is left
attrs.each { k, v ->
...
}
if(useNameAsIdIfIdDoesNotExist) {
outputNameAsIdIfIdDoesNotExist(attrs, writer)
}
}
此方法调用outputNameAsIdIfIdDoesNotExist...,它将生成实际的 id。由于outputAttribues 总是收到true,所以无法覆盖它。