我注意到用於生成輸入元素的一些Grails標籤(g:textField
,g:hiddenField
和其他一些)自動將生成的HTML標籤的id屬性設置爲name屬性,除非id屬性是明確給出的。防止Grails輸入標籤添加id屬性
有什麼辦法可以使用這些自定義標籤來生成一個沒有id屬性的HTML標籤嗎?我嘗試將id屬性設置爲空字符串,但生成的代碼將id設置爲名稱。
我知道我可以用自定義標籤做到這一點,但我想知道是否有一個更簡單的方法。
我注意到用於生成輸入元素的一些Grails標籤(g:textField
,g:hiddenField
和其他一些)自動將生成的HTML標籤的id屬性設置爲name屬性,除非id屬性是明確給出的。防止Grails輸入標籤添加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
,因此無法覆蓋它。
這不是我想看到的答案,但它回答了我的問題,它很有幫助。謝謝。 – 2012-02-13 18:45:41