我注意到,一些用于生成输入元素的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
(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
,因此无法进行覆盖。
关于html - 防止Grails输入标签添加id属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9216613/