メッセージの渡し方
生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"; // リダイレクトな遷移 } }
こうすれば、メッセージがセッションスコープで登録されるようで、リダイレクトした後でもメッセージの表示が出来ました。