html - 防止Grails输入标签添加id属性

标签 html grails groovy gsp

我注意到,一些用于生成输入元素的Grails标记(g:textFieldg: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/

相关文章:

php - 用于 PHP/Zend、Javascript/JQuery、CSS、HTML、XML 的 Eclipse IDE 设置

html - 按钮在 IE 中无法正常工作?

hibernate - GORM:懒惰地保存

grails,应用程序成功运行后出现错误,我的项目上出现红色感叹号?

java - Groovy,嵌入Java,回调Java

java - For 循环在 Groovy 和 Java 中的工作方式不同

html - 与 IE7 的兼容性问题?

c# - 为什么要在超链接中使用 window.location?

grails - 有没有更好的方法可以在Grails中返回并显示多个列表到 View ?

groovy - groovy 如何为 Java 类添加新方法?