著作一覧 |
エラーメッセージをActionMessageに入れて処理したい。
この時、エラーメッセージはリソース(プロパティファイル)に入れておきたい。
で、そのメッセージが「かっこは[]{}()が使えます」だとする。
当然、プロパティファイルには、message.kakko=かっこは[]{}()が使えます とか書いて、それをnative2asciiしておく。
これが例外となる。
MessageFormatが、{}に数字がないのはIllegalArgumentだと言うからだ。それは正しい。
そこで、「かっこは[]'{}'()が使えます」と、クォートする。こないだ覚えたから問題なし。
しかしうまくいかない。同じく例外となる。どうもStrutsが消費しているような気がする(つい調べてしまったらMessageResourcesのescapeメソッドで''を作っているからだ。プロパティファイルをMessageFormat透過にしようとしているのだと思う)。たとえば、「笑顔の値段は\2です。」としたのが「笑顔の値段は2です。」となったりするので、「笑顔の値段は\\2です。」とする必要があるのと同じく何かをStrutsがやっているからだろう。
そこで、「かっこは[]{0}()が使えます」として、"{}"を与えることを考える。
これは多分うまくいくと思う。しかしねぇ、ActionMessageを作る処理の中で、常に"{}"を引数として与えるというのも妙だ。かといって、文字列の中に{0}が存在したら"{}"を与えるというのも気に食わない。
そこで、常に new ActionMessage(msgresource.getMessage(key).replace("curlykakkokokka", "{}"), false)としてみる。プロパティの中で{}の代わりにcurlykakkokokkaを書くことにするわけだ。
と、書いてみるとこれで良さそうだが(なぜそうしなかったのか覚えていないが)、最終的にはActionMessageを継承してgetKeyの時点で上記を実行するようにして逃げた。
しかし、MessageResources#setEscapeをあらかじめfalseを引数にして呼んでいれば良かったことに気づいてしまった。というか、今、MessageResourcesを読んで気づいた。明日、修正しよう。
ジェズイットを見習え |