メッセージの渡し方

StrutsのActionクラスではsaveMessagesメソッドを使えば、ビューへメッセージを渡せますが、SAStrutsではどうやって渡すのか調べてみたら、ActionMessagesUtilというユーティリティクラスが用意されていました。

Actionクラスでの使い方は以下のような感じ。

public class HogeAction {

    public HttpServletRequest request;

    // 中略

    @Execute(input = "index.jsp")
    public String submit() {
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("xxxxxx")); // xxxxxxはメッセージリソースに定義
        ActionMessagesUtil.addMessages(request, messages);
        return "index.jsp";
    }
}

jspでの出力はhtml:messagesタグを使う。

<html:messages id="msg" message="true">
  <bean:write name="msg" ignore="true"/>
</html:messages>

ActionMessagesUtil.addMessagesの引数にrequestを使った場合、遷移をリダイレクトにすると遷移先でメッセージが表示されないので、そのような場合にはsessionを使えば良さそう。

public class HogeAction {

    public HttpSession session;

    // 中略

    @Execute(input = "index.jsp")
    public String submit() {
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("xxxxxx")); 
        ActionMessagesUtil.addMessages(session, messages); // 引数をsessionに
        return "index?redirect=true"; // リダイレクトな遷移
    }
}

こうすれば、メッセージがセッションスコープで登録されるようで、リダイレクトした後でもメッセージの表示が出来ました。