Posted at

テンプレートタグ文法の衝突を(無理矢理)回避する

More than 5 years have passed since last update.


背景

playframework 1.x の groovy テンプレートはいくつかの独自構文を定義しています。


問題

このうち、式の ${...} は jsp や velocity などでも見かける一般的な構文ですが、タグ #{...} や メッセージタグ &{...}, リバースタグ @{...} は独自色が強く、そのため他のプロダクトと組み合わせて使用する際に構文が衝突する場合があります。

例えば、URL の一部文字列を置換するために {id}{key} などというプレースホルダを指定するプロダクトがあった場合、これをラベルや get パラメータに含めると

http://someurl/xxx#{id}?key=value&{key}=value

という URL を組み上げる際に、タグ #{...} や メッセージタグ &{...} の文法が衝突します。実際に tablesorter の文法と衝突しました。


(暫定)対応

この問題は、以下のようにしてスクリプトタグ %{...}% で当該箇所を出力することで(無理矢理)回避することができます。

%{out.print('http://someurl/xxx#{id}?key=value&{key}=value');}%

もっといい方法があったら教えてください。