ActionErrorの国際化対応

    new ActionError("message.key", "replace value");

問題は"replace value"の所です。通常の使い方だと固定で文字列を埋め込むようになっていますよね。これが問題です。置換文字列そのものも国際化対応したい場合どうしろと…。ActionErrorを主に作るのはActionForm内のvalidateメソッドですよね。validateメソッド内だと簡単にメッセージリソースを取得する方法が無いように思えます。Actionの方ならgetResourcesが使えるので問題ないんですが、そんなことしてるとvalidateメソッドを使わなくなっちゃいます。validateメソッドを使わないとstruts-configのactionタグ、input属性が効きません。どうしろと・・・(苦笑)

最も美しくない解決方法が置換文字列そのものを含んだ完全なメッセージを定義する事。置換文字列が必要なメッセージは例えば

{0}は必須入力です。

みたいな奴なんで、それをひとつずつ定義するのは非常に美しくない。リソースを取得する方法を探すか、メッセージを取ってくるコードを書くか、全部定義する事に我慢するか、埋め込み文字列で押し切ってしまうか。これは全体にからむ所なんで少し時間を割きます。がんばれ自分ー。無駄な努力だったら遠慮えず泣けー(笑)

#追記:Struts1.2からActionMessageの使用を推奨なんですね。ActionErrorはActionMessageのラッパーみたいで、意味ないんじゃ?と思ったらそういう事でしたか。ふむふむ。もうソースレベルで追っかけてます(苦笑)