Strutsのタグで日本語のパラメータを扱う
<html:link>タグで、paramId等に日本語のパラメータ名を使おうとすると、期待した結果が得られません。これは、URLの生成処理の中でUTF-8でURLエンコードされてしまうためです。通常Webアプリケーションでは、リクエスト内容の文字セットはそのページの文字セットと同一であることを前提に作る*1と思います*2ので、UTF-8決め打ちだと困るのです。
- Ja-Jakarta Project 掲示板 > strutsのカスタムタグ(linkタグ)について
- [struts-user:2840] Re: <html:link>等のタグでのURLEncodingについて
対策として、上記のページでも挙げられていますが、以下のような方法があります。
- 全てのページの文字セットを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:ついでに言うとこの前提は、現在のブラウザの実装がほとんどそうなっている、というだけのことに依拠していて、明確な規定はなかったと思います。