2012-02-09 33 views
1

我注意到用於生成輸入元素的一些Grails標籤(g:textFieldg:hiddenField和其他一些)自動將生成的HTML標籤的id屬性設置爲name屬性,除非id屬性是明確給出的。防止Grails輸入標籤添加id屬性

有什麼辦法可以使用這些自定義標籤來生成一個沒有id屬性的HTML標籤嗎?我嘗試將id屬性設置爲空字符串,但生成的代碼將id設置爲名稱。

我知道我可以用自定義標籤做到這一點,但我想知道是否有一個更簡單的方法。

回答

2

這似乎不可能。 FormTagLib.groovy類的源代碼顯示有一個標誌決定是否寫入id與屬性相同的屬性,如果沒有給出id。不幸的是,它在上變成了,並且不能從外部配置。見下面的代碼:

首先,我們的g:textField它調用fieldImpl

def textField = { attrs -> 
    attrs.type = "text" 
    attrs.tagName = "textField" 
    fieldImpl(out, attrs) 
} 

方法fieldImplfull 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,因此無法覆蓋它。

+1

這不是我想看到的答案,但它回答了我的問題,它很有幫助。謝謝。 – 2012-02-13 18:45:41