我注意到一些用于生成输入元素的Grails标签(g:textField
,g:hiddenField
和其他一些(自动将生成的HTML标签的id属性设置为等于name属性,除非明确给出id属性。
有没有办法使用这些自定义标签来生成没有 id 属性的 HTML 标签?我尝试将 id 属性设置为空字符串,但生成的代码将 id 设置为名称。
我知道我可以使用自定义标签来做到这一点,但我想知道是否有更简单的方法。
似乎是不可能的。FormTagLib.groovy
类的源代码显示,有一个标志决定在没有给出 id 的情况下是否编写与名称相同的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)
}
}
此方法调用将生成实际 id 的outputNameAsIdIfIdDoesNotExist...
。由于outputAttribues
总是收到true
,因此无法执行任何操作来覆盖它。