矢野 勉
benbr****@mac*****
2008年 4月 15日 (火) 21:59:21 JST
矢野です。 Filterで解決したとのことでよかったです。 UTF-8とsetCharacterEncoding()の件ですが、これは私の考えでは Wicketのバグです。まあ、setCharacterEncoding()すること 自体は正しいのですが。 通常HTMLフォームは自分が今使っている(表示に使った)文 字エンコードを使って情報を送信します。Wicketはページ表 示の際のコードとしてsetResponseRequestEncoding()の値を 使うので、フォームを受け取る際もこのコードを使うのは正しい。 ただしAjaxButtonによるサブミットとなると話は別で、ここ で使われているencodeURIComponent()関数は、ECMAScript 仕様によって文字をUTF-8にエンコードして送信することに なっています。Wicketの一部であるAjaxButtonが内部で encodeURIComponentを使っている以上、それを受け取る際に UTF-8として読み込むのはWicketの仕事であるはずで、そう なってないのは単なるバグだと思います。 文字エンコーディングであまり苦しむことのないアルファベット圏 の人たちはUTF-8でやれば動くからこれで解決!と安易に考え がちなので、2バイト文字文化圏からガンガンいってやらないと分 からないかと思います。 幸い今回はFilterでAjaxコンポーネントからのサブ ミットを検知する方法まで分かっていますし、ざっとみてみたら WicketFilterのdoGet()メソッド内部で setCharacterEncoding()しているのがすぐに見つかりましたから、 あとでバグ報告しておこうと思います。 --------------------------------------------------- 矢野 勉(やの つとむ) 電子メール:benbrand_at_mac.com ---------------------------------------------------