SAStrutsで1件だけのメッセージをシンプルに追加する

みんな勝手にやってるような気がするけど一応書いてみる。

SAStrutsでリダイレクト後にメッセージを表示したい場合、通常以下のようにすると思う。

ActionMessages messages = new ActionMessages();
messages.add(ActionMessages.GROBAL_MESSAGE, new ActionMessage("key"));
ActionMessagesUtil.saveMessages(session, messages);

で、思うんだけどこういう場合にメッセージを表示するのって殆の場合が1件だけだと思うんだよね。それなのにActionMessagesを用意するのって面倒だなーと。

で、リファクタリングとして1件のメッセージをsaveするActionMessagesUtilEx#saveSingleMessage()を作ってみる。

public class ActionMessagesUtilEx {
    public static void saveSingleMessage(HttpSession session, String property, String key) {
        ActionMessages messages = new ActionMessages();
        messages.add(property, new ActionMessage(key));
        ActionMessagesUtil.saveMessages(session, messages);
    }
}

使う側はこうなる。

ActionMessagesUtilEx.saveSingleMessage(session, ActionMessages.GLOBAL_MESSAGE, "key");

シンプルで意図が分かりやすくなった。

staticインポートを使えばもっとスッキリする。

saveSingleMessage(session, GLOBAL_MESSAGE, "key");

比べてみれば、記述量も分かりやすさも一目瞭然(両方ともstaticインポート使用)

ActionMessages messages = new ActionMessages();
messages.add(GROBAL_MESSAGE, new ActionMessage("key"));
saveMessages(session, messages);

saveSingleMessage(session, GLOBAL_MESSAGE, "key");

補足等

  • saveErrors用のヘルパーメソッドを用意してもよいね
  • ActionMessagesUtilExという名前では依然としてsがついて複数形だけど、ActionMessagesUtilの特別版という意図を残したいのでこの名前。賛否両論?
  • saveSingleMessageじゃなくてsaveMessageでも十分意図は伝わるかも?