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でも十分意図は伝わるかも?