我注意到一些用于生成输入元素的Grails标记(g:textField
,g:hiddenField
和其他一些标记符号)会自动将生成的HTML标记的id属性设置为name属性,除非id属性是明确给出的。
有没有办法使用这些自定义标记生成没有id属性的HTML标记?我尝试将id属性设置为空字符串,但生成的代码将id设置为名称。
我知道我可以使用自定义标签执行此操作,但我想知道是否有更简单的方法。
答案 0 :(得分:2)
这似乎不可能。 FormTagLib.groovy
类的源代码显示,如果未给出id,则有一个标志决定是否写入与{1}}相同的属性。不幸的是,它已经 on 而无法从外部配置。请参阅以下代码:
首先,我们有id
来源g:textField
fieldImpl
方法def textField = { attrs ->
attrs.type = "text"
attrs.tagName = "textField"
fieldImpl(out, attrs)
}
(full source available on Github)调用fieldImpl
。请注意第三个参数outputAttributes
true
outputAttributes看起来像这样(缩写):
def fieldImpl(out, attrs) {
resolveAttributes(attrs)
out << "<input type=\"${attrs.remove('type')}\" "
outputAttributes(attrs, out, true)
out << "/>"
}
此方法调用将生成实际ID的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
,因此无法覆盖它。