Strutsの<html:link>タグで日本語のパラメータを扱う

<html:link>タグで、paramId等に日本語のパラメータ名を使おうとすると、期待した結果が得られません。これは、URLの生成処理の中でUTF-8でURLエンコードされてしまうためです。通常Webアプリケーションでは、リクエスト内容の文字セットはそのページの文字セットと同一であることを前提に作る*1と思います*2ので、UTF-8決め打ちだと困るのです。

対策として、上記のページでも挙げられていますが、以下のような方法があります。

  • 全てのページの文字セットをUTF-8にする。
  • <html:link>を使わず、自力でURLを生成する。
  • <html:link>タグを拡張して、URLエンコーディングの際の文字セットを指定できるようにする。

この中の3番目をやってみました。結構あっさりできてしまいました。<html:rewrite>や<html:img>にも対応した段階で、どこかに公開しようと思います。欲しがる人はいるかな?

Strutsのソースって・・・なかなかパワフルですね。

*1:contentType="text/html; charset=Windows-31J"の画面から来るリクエストに対して、普通はHttpServletRequest#setCharacterEncoding("Windows-31J")を行うということです。うまく表現できない・・・

*2:ついでに言うとこの前提は、現在のブラウザの実装がほとんどそうなっている、というだけのことに依拠していて、明確な規定はなかったと思います。