Это кажется невозможным. Исходный код класса FormTagLib.groovy
показывает, что существует флаг, который решает, писать ли атрибуты id
, идентичные имени, если идентификатор не был задан. К сожалению, он включен на и не настраивается извне. Смотрите следующий код:
Во-первых, у нас есть источник g:textField
, который вызывает fieldImpl
def textField = { attrs ->
attrs.type = "text"
attrs.tagName = "textField"
fieldImpl(out, attrs)
}
Метод fieldImpl
( полный исходный код доступен на 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...
, который сгенерирует фактический идентификатор. Поскольку outputAttribues
всегда получает true
, ничего нельзя сделать, чтобы перезаписать его.