防止Grails输入标记添加id属性

时间:2012-02-09 18:30:06

标签: html grails groovy gsp

我注意到一些用于生成输入元素的Grails标记(g:textFieldg:hiddenField和其他一些标记符号)会自动将生成的HTML标记的id属性设置为name属性,除非id属性是明确给出的。

有没有办法使用这些自定义标记生成没有id属性的HTML标记?我尝试将id属性设置为空字符串,但生成的代码将id设置为名称。

我知道我可以使用自定义标签执行此操作,但我想知道是否有更简单的方法。

1 个答案:

答案 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,因此无法覆盖它。