読者です 読者をやめる 読者になる 読者になる

GrailsのTaglib使っててid属性がどこかへいってしまう

htmlのid属性と、grailsのlink生成のためのドメインIDが混在していてややこしいのですが、例えばg:link

<a href="/appname/book/list" id="book-list">book list</a>

というようなHTMLを期待して

<g:link controller="book" action="list" id="book-list">book list</g:link>

といういうふうにg:linkを使うと実際には

<a href="/appname/book/list/book-list">book list</a>

となってしまいます。これをg:linkで回避するにはidではなくelementIdを指定します。

<g:link controller="book" action="list" elementId="book-list">book list</g:link>

そうすると期待する

<a href="/appname/book/list" id="book-list">book list</a>

になります。

g:formの場合はまた、ちょっと動作が違っていて

<g:form controller="book" action="create" id="create-book">
  ...
</g:form>

ではなく

<g:form url="[controller: 'book', action: 'create']" id="create-book">
  ...
</g:form>

というふうにurl属性を使用すると回避できます。なぜかこちらidのままでおk(なんで統一されていなの?)。

全部調べてませんが、他のタグでも困ったらリファレンス参照するか、grailsのtaglibのソースを探ると良いです。