【问题标题】:Prevent Grails input tags from adding id attributes防止 Grails 输入标签添加 id 属性
【发布时间】:2012-02-09 18:30:05
【问题描述】:

我注意到一些用于生成输入元素的 Grails 标记(g:textFieldg:hiddenField 和其他一些)会自动将生成的 HTML 标记的 id 属性设置为等于 name 属性,除非显式地设置了 id 属性给定的。

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

我知道我可以使用自定义标签来做到这一点,但我想知道是否有更简单的方法。

【问题讨论】:

    标签: html grails groovy gsp


    【解决方案1】:

    这似乎是不可能的。 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,所以无法覆盖它。

    【讨论】:

    • 这不是我想看到的答案,但它回答了我的问题并且很有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多