0

このようなコード:

<g:link controller="category" action="show" id="${category.id}">${category.name}</g:link>

次のリンクを生成します。

<a href="/shop/categories/show/1/**">Test category</a>

なぜそれが起こるのか、この見栄えの悪い二重アスタリスクを削除する方法は?

4

1 に答える 1

3

あなたのコメントから:

URLMappings にはこれが含まれます"/categories/$action?/$id?/**?"。しかし、意味のある部分の後に URL に不要な部分が含まれていても構わないと grails に伝えたいのです。

バインドされていないワイルドカード (*および**) は、「転送」URL マッピング (つまり、着信要求 URI を取得し、パラメーターを使用してコントローラー アクションにマッピングする) に対して正しいことを行いますが、 default のソース コードを見ると、そのRegexUrlMappingような*およびコンポーネントを逆にマッピングする**と、生成された URL に文字どおり含まれます。適切な URL を生成できるようにするには、マッピングのすべてのセグメントがリテラルであるか、名前付き変数にバインドされている必要があります。これにより、ジェネレーターは、ワイルドカードを置き換えるために使用する必要がある (場合によっては空の) 値を知ることができます。

マッピングを使用する場合

"/categories/$action?/$id?/$path**?"

idその場合、転送モード ( inの後に URI の末尾部分を格納する) で同じ URI に引き続き一致しますparams.path<g:link controller="category" action="show" id="${category.id}">、 を指定しなかったため、空の末尾コンポーネントを使用することがわかりますparams="[path:'something']"

于 2012-11-01T11:08:28.187 に答える