2012-02-09 11 views
1

入力要素を生成するためのGrailsタグ(g:textFieldg:hiddenFieldなど)のいくつかは、生成されたHTMLタグのid属性をname属性id属性は明示的に与えられます。Grailsの入力タグがid属性を追加しないようにする

これらのカスタムタグを使用してid属性を持たないHTMLタグを作成する方法はありますか? id属性を空の文字列に設定しようとしましたが、生成されたコードのIDに名前が設定されていました。

私はカスタムタグでこれを行うことができますが、もっと簡単な方法があるかどうかは疑問です。

答えて

2

これは可能ではないようです。 FormTagLib.groovyクラスのソースコードには、idが指定されていない場合は、idの属性を名前と同じにするかどうかを決定するフラグがあることが示されています。残念ながらとなり、外部からの設定はできません。次のコードを参照してください:

まず、我々は法fieldImplfull source available on GithubfieldImpl

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

呼び出すoutputAttributesを呼び出しg:textFieldのソースを持っています。

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) 
    } 
} 

この方法は、実際のIDを生成するoutputNameAsIdIfIdDoesNotExist...を呼び出し:true

def fieldImpl(out, attrs) { 
    resolveAttributes(attrs) 
    out << "<input type=\"${attrs.remove('type')}\" " 
    outputAttributes(attrs, out, true) 
    out << "/>" 
} 

outputAttributesこの(略称)のように見えるである第三のパラメータに注意してください。 outputAttribuesは常にtrueを受け取るので、何もそれを上書きすることはできません。

+1

これは私が見たかった答えではありませんが、私の質問に答えると役に立ちます。ありがとうございました。 –